123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- package gojsonschema
- import (
- "fmt"
- "strings"
- )
- type (
- // RequiredError. ErrorDetails: property string
- RequiredError struct {
- ResultErrorFields
- }
- // InvalidTypeError. ErrorDetails: expected, given
- InvalidTypeError struct {
- ResultErrorFields
- }
- // NumberAnyOfError. ErrorDetails: -
- NumberAnyOfError struct {
- ResultErrorFields
- }
- // NumberOneOfError. ErrorDetails: -
- NumberOneOfError struct {
- ResultErrorFields
- }
- // NumberAllOfError. ErrorDetails: -
- NumberAllOfError struct {
- ResultErrorFields
- }
- // NumberNotError. ErrorDetails: -
- NumberNotError struct {
- ResultErrorFields
- }
- // MissingDependencyError. ErrorDetails: dependency
- MissingDependencyError struct {
- ResultErrorFields
- }
- // InternalError. ErrorDetails: error
- InternalError struct {
- ResultErrorFields
- }
- // EnumError. ErrorDetails: allowed
- EnumError struct {
- ResultErrorFields
- }
- // ArrayNoAdditionalItemsError. ErrorDetails: -
- ArrayNoAdditionalItemsError struct {
- ResultErrorFields
- }
- // ArrayMinItemsError. ErrorDetails: min
- ArrayMinItemsError struct {
- ResultErrorFields
- }
- // ArrayMaxItemsError. ErrorDetails: max
- ArrayMaxItemsError struct {
- ResultErrorFields
- }
- // ItemsMustBeUniqueError. ErrorDetails: type
- ItemsMustBeUniqueError struct {
- ResultErrorFields
- }
- // ArrayMinPropertiesError. ErrorDetails: min
- ArrayMinPropertiesError struct {
- ResultErrorFields
- }
- // ArrayMaxPropertiesError. ErrorDetails: max
- ArrayMaxPropertiesError struct {
- ResultErrorFields
- }
- // AdditionalPropertyNotAllowedError. ErrorDetails: property
- AdditionalPropertyNotAllowedError struct {
- ResultErrorFields
- }
- // InvalidPropertyPatternError. ErrorDetails: property, pattern
- InvalidPropertyPatternError struct {
- ResultErrorFields
- }
- // StringLengthGTEError. ErrorDetails: min
- StringLengthGTEError struct {
- ResultErrorFields
- }
- // StringLengthLTEError. ErrorDetails: max
- StringLengthLTEError struct {
- ResultErrorFields
- }
- // DoesNotMatchPatternError. ErrorDetails: pattern
- DoesNotMatchPatternError struct {
- ResultErrorFields
- }
- // DoesNotMatchFormatError. ErrorDetails: format
- DoesNotMatchFormatError struct {
- ResultErrorFields
- }
- // MultipleOfError. ErrorDetails: multiple
- MultipleOfError struct {
- ResultErrorFields
- }
- // NumberGTEError. ErrorDetails: min
- NumberGTEError struct {
- ResultErrorFields
- }
- // NumberGTError. ErrorDetails: min
- NumberGTError struct {
- ResultErrorFields
- }
- // NumberLTEError. ErrorDetails: max
- NumberLTEError struct {
- ResultErrorFields
- }
- // NumberLTError. ErrorDetails: max
- NumberLTError struct {
- ResultErrorFields
- }
- )
- // newError takes a ResultError type and sets the type, context, description, details, value, and field
- func newError(err ResultError, context *jsonContext, value interface{}, locale locale, details ErrorDetails) {
- var t string
- var d string
- switch err.(type) {
- case *RequiredError:
- t = "required"
- d = locale.Required()
- case *InvalidTypeError:
- t = "invalid_type"
- d = locale.InvalidType()
- case *NumberAnyOfError:
- t = "number_any_of"
- d = locale.NumberAnyOf()
- case *NumberOneOfError:
- t = "number_one_of"
- d = locale.NumberOneOf()
- case *NumberAllOfError:
- t = "number_all_of"
- d = locale.NumberAllOf()
- case *NumberNotError:
- t = "number_not"
- d = locale.NumberNot()
- case *MissingDependencyError:
- t = "missing_dependency"
- d = locale.MissingDependency()
- case *InternalError:
- t = "internal"
- d = locale.Internal()
- case *EnumError:
- t = "enum"
- d = locale.Enum()
- case *ArrayNoAdditionalItemsError:
- t = "array_no_additional_items"
- d = locale.ArrayNoAdditionalItems()
- case *ArrayMinItemsError:
- t = "array_min_items"
- d = locale.ArrayMinItems()
- case *ArrayMaxItemsError:
- t = "array_max_items"
- d = locale.ArrayMaxItems()
- case *ItemsMustBeUniqueError:
- t = "unique"
- d = locale.Unique()
- case *ArrayMinPropertiesError:
- t = "array_min_properties"
- d = locale.ArrayMinProperties()
- case *ArrayMaxPropertiesError:
- t = "array_max_properties"
- d = locale.ArrayMaxProperties()
- case *AdditionalPropertyNotAllowedError:
- t = "additional_property_not_allowed"
- d = locale.AdditionalPropertyNotAllowed()
- case *InvalidPropertyPatternError:
- t = "invalid_property_pattern"
- d = locale.InvalidPropertyPattern()
- case *StringLengthGTEError:
- t = "string_gte"
- d = locale.StringGTE()
- case *StringLengthLTEError:
- t = "string_lte"
- d = locale.StringLTE()
- case *DoesNotMatchPatternError:
- t = "pattern"
- d = locale.DoesNotMatchPattern()
- case *DoesNotMatchFormatError:
- t = "format"
- d = locale.DoesNotMatchFormat()
- case *MultipleOfError:
- t = "multiple_of"
- d = locale.MultipleOf()
- case *NumberGTEError:
- t = "number_gte"
- d = locale.NumberGTE()
- case *NumberGTError:
- t = "number_gt"
- d = locale.NumberGT()
- case *NumberLTEError:
- t = "number_lte"
- d = locale.NumberLTE()
- case *NumberLTError:
- t = "number_lt"
- d = locale.NumberLT()
- }
- err.SetType(t)
- err.SetContext(context)
- err.SetValue(value)
- err.SetDetails(details)
- details["field"] = err.Field()
- err.SetDescription(formatErrorDescription(d, details))
- }
- // formatErrorDescription takes a string in this format: %field% is required
- // and converts it to a string with replacements. The fields come from
- // the ErrorDetails struct and vary for each type of error.
- func formatErrorDescription(s string, details ErrorDetails) string {
- for name, val := range details {
- s = strings.Replace(s, "%"+strings.ToLower(name)+"%", fmt.Sprintf("%v", val), -1)
- }
- return s
- }
|