diff --git a/tests/data/core/allOf/allOf.go b/tests/data/core/allOf/allOf.go index fcd447e0..5b31ea6f 100644 --- a/tests/data/core/allOf/allOf.go +++ b/tests/data/core/allOf/allOf.go @@ -6,6 +6,11 @@ import "encoding/json" import "fmt" import yaml "gopkg.in/yaml.v3" +type AllOf struct { + // Configurations corresponds to the JSON schema field "configurations". + Configurations []AllOfConfigurationsElem `json:"configurations,omitempty" yaml:"configurations,omitempty" mapstructure:"configurations,omitempty"` +} + type AllOfConfigurationsElem struct { // Bar corresponds to the JSON schema field "bar". Bar float64 `json:"bar" yaml:"bar" mapstructure:"bar"` @@ -20,10 +25,10 @@ func (j *AllOfConfigurationsElem) UnmarshalJSON(value []byte) error { if err := json.Unmarshal(value, &raw); err != nil { return err } - if v, ok := raw["bar"]; !ok || v == nil { + if _, ok := raw["bar"]; raw != nil && !ok { return fmt.Errorf("field bar in AllOfConfigurationsElem: required") } - if v, ok := raw["foo"]; !ok || v == nil { + if _, ok := raw["foo"]; raw != nil && !ok { return fmt.Errorf("field foo in AllOfConfigurationsElem: required") } type Plain AllOfConfigurationsElem @@ -41,10 +46,10 @@ func (j *AllOfConfigurationsElem) UnmarshalYAML(value *yaml.Node) error { if err := value.Decode(&raw); err != nil { return err } - if v, ok := raw["bar"]; !ok || v == nil { + if _, ok := raw["bar"]; raw != nil && !ok { return fmt.Errorf("field bar in AllOfConfigurationsElem: required") } - if v, ok := raw["foo"]; !ok || v == nil { + if _, ok := raw["foo"]; raw != nil && !ok { return fmt.Errorf("field foo in AllOfConfigurationsElem: required") } type Plain AllOfConfigurationsElem @@ -55,8 +60,3 @@ func (j *AllOfConfigurationsElem) UnmarshalYAML(value *yaml.Node) error { *j = AllOfConfigurationsElem(plain) return nil } - -type AllOf struct { - // Configurations corresponds to the JSON schema field "configurations". - Configurations []AllOfConfigurationsElem `json:"configurations,omitempty" yaml:"configurations,omitempty" mapstructure:"configurations,omitempty"` -} diff --git a/tests/data/core/anyOf/anyOf.go b/tests/data/core/anyOf/anyOf.go index 358396a1..8ee46c8a 100644 --- a/tests/data/core/anyOf/anyOf.go +++ b/tests/data/core/anyOf/anyOf.go @@ -31,41 +31,77 @@ type AnyOfConfigurationsElem_0 struct { Foo string `json:"foo" yaml:"foo" mapstructure:"foo"` } +// UnmarshalJSON implements json.Unmarshaler. +func (j *AnyOfConfigurationsElem_0) UnmarshalJSON(value []byte) error { + var raw map[string]interface{} + if err := json.Unmarshal(value, &raw); err != nil { + return err + } + if _, ok := raw["foo"]; raw != nil && !ok { + return fmt.Errorf("field foo in AnyOfConfigurationsElem_0: required") + } + type Plain AnyOfConfigurationsElem_0 + var plain Plain + if err := json.Unmarshal(value, &plain); err != nil { + return err + } + *j = AnyOfConfigurationsElem_0(plain) + return nil +} + +// UnmarshalYAML implements yaml.Unmarshaler. +func (j *AnyOfConfigurationsElem_0) UnmarshalYAML(value *yaml.Node) error { + var raw map[string]interface{} + if err := value.Decode(&raw); err != nil { + return err + } + if _, ok := raw["foo"]; raw != nil && !ok { + return fmt.Errorf("field foo in AnyOfConfigurationsElem_0: required") + } + type Plain AnyOfConfigurationsElem_0 + var plain Plain + if err := value.Decode(&plain); err != nil { + return err + } + *j = AnyOfConfigurationsElem_0(plain) + return nil +} + type AnyOfConfigurationsElem_1 struct { // Bar corresponds to the JSON schema field "bar". Bar float64 `json:"bar" yaml:"bar" mapstructure:"bar"` } -// UnmarshalJSON implements json.Unmarshaler. -func (j *AnyOfConfigurationsElem_1) UnmarshalJSON(value []byte) error { +// UnmarshalYAML implements yaml.Unmarshaler. +func (j *AnyOfConfigurationsElem_1) UnmarshalYAML(value *yaml.Node) error { var raw map[string]interface{} - if err := json.Unmarshal(value, &raw); err != nil { + if err := value.Decode(&raw); err != nil { return err } - if v, ok := raw["bar"]; !ok || v == nil { + if _, ok := raw["bar"]; raw != nil && !ok { return fmt.Errorf("field bar in AnyOfConfigurationsElem_1: required") } type Plain AnyOfConfigurationsElem_1 var plain Plain - if err := json.Unmarshal(value, &plain); err != nil { + if err := value.Decode(&plain); err != nil { return err } *j = AnyOfConfigurationsElem_1(plain) return nil } -// UnmarshalYAML implements yaml.Unmarshaler. -func (j *AnyOfConfigurationsElem_1) UnmarshalYAML(value *yaml.Node) error { +// UnmarshalJSON implements json.Unmarshaler. +func (j *AnyOfConfigurationsElem_1) UnmarshalJSON(value []byte) error { var raw map[string]interface{} - if err := value.Decode(&raw); err != nil { + if err := json.Unmarshal(value, &raw); err != nil { return err } - if v, ok := raw["bar"]; !ok || v == nil { + if _, ok := raw["bar"]; raw != nil && !ok { return fmt.Errorf("field bar in AnyOfConfigurationsElem_1: required") } type Plain AnyOfConfigurationsElem_1 var plain Plain - if err := value.Decode(&plain); err != nil { + if err := json.Unmarshal(value, &plain); err != nil { return err } *j = AnyOfConfigurationsElem_1(plain) @@ -107,24 +143,6 @@ func (j *AnyOfConfigurationsElem_2) UnmarshalYAML(value *yaml.Node) error { return nil } -// UnmarshalYAML implements yaml.Unmarshaler. -func (j *AnyOfConfigurationsElem_0) UnmarshalYAML(value *yaml.Node) error { - var raw map[string]interface{} - if err := value.Decode(&raw); err != nil { - return err - } - if v, ok := raw["foo"]; !ok || v == nil { - return fmt.Errorf("field foo in AnyOfConfigurationsElem_0: required") - } - type Plain AnyOfConfigurationsElem_0 - var plain Plain - if err := value.Decode(&plain); err != nil { - return err - } - *j = AnyOfConfigurationsElem_0(plain) - return nil -} - // UnmarshalJSON implements json.Unmarshaler. func (j *AnyOfConfigurationsElem) UnmarshalJSON(value []byte) error { var raw map[string]interface{} @@ -186,21 +204,3 @@ func (j *AnyOfConfigurationsElem) UnmarshalYAML(value *yaml.Node) error { *j = AnyOfConfigurationsElem(plain) return nil } - -// UnmarshalJSON implements json.Unmarshaler. -func (j *AnyOfConfigurationsElem_0) UnmarshalJSON(value []byte) error { - var raw map[string]interface{} - if err := json.Unmarshal(value, &raw); err != nil { - return err - } - if v, ok := raw["foo"]; !ok || v == nil { - return fmt.Errorf("field foo in AnyOfConfigurationsElem_0: required") - } - type Plain AnyOfConfigurationsElem_0 - var plain Plain - if err := json.Unmarshal(value, &plain); err != nil { - return err - } - *j = AnyOfConfigurationsElem_0(plain) - return nil -} diff --git a/tests/data/core/objectPropertiesDefault/objectPropertiesDefault.go b/tests/data/core/objectPropertiesDefault/objectPropertiesDefault.go index af6be8c3..81a1ec68 100644 --- a/tests/data/core/objectPropertiesDefault/objectPropertiesDefault.go +++ b/tests/data/core/objectPropertiesDefault/objectPropertiesDefault.go @@ -24,6 +24,84 @@ type DecoratedPlannerDecorator struct { Theme *string `json:"theme,omitempty" yaml:"theme,omitempty" mapstructure:"theme,omitempty"` } +// UnmarshalJSON implements json.Unmarshaler. +func (j *DecoratedPlannerDecorator) UnmarshalJSON(value []byte) error { + var raw map[string]interface{} + if err := json.Unmarshal(value, &raw); err != nil { + return err + } + type Plain DecoratedPlannerDecorator + var plain Plain + if err := json.Unmarshal(value, &plain); err != nil { + return err + } + if v, ok := raw["color"]; !ok || v == nil { + plain.Color = "#ffffff" + } + *j = DecoratedPlannerDecorator(plain) + return nil +} + +// UnmarshalYAML implements yaml.Unmarshaler. +func (j *DecoratedPlannerDecorator) UnmarshalYAML(value *yaml.Node) error { + var raw map[string]interface{} + if err := value.Decode(&raw); err != nil { + return err + } + type Plain DecoratedPlannerDecorator + var plain Plain + if err := value.Decode(&plain); err != nil { + return err + } + if v, ok := raw["color"]; !ok || v == nil { + plain.Color = "#ffffff" + } + *j = DecoratedPlannerDecorator(plain) + return nil +} + +// UnmarshalYAML implements yaml.Unmarshaler. +func (j *DecoratedPlanner) UnmarshalYAML(value *yaml.Node) error { + var raw map[string]interface{} + if err := value.Decode(&raw); err != nil { + return err + } + type Plain DecoratedPlanner + var plain Plain + if err := value.Decode(&plain); err != nil { + return err + } + if v, ok := raw["decorator"]; !ok || v == nil { + plain.Decorator = DecoratedPlannerDecorator{ + Color: "#ffffff", + Theme: nil, + } + } + *j = DecoratedPlanner(plain) + return nil +} + +// UnmarshalJSON implements json.Unmarshaler. +func (j *DecoratedPlanner) UnmarshalJSON(value []byte) error { + var raw map[string]interface{} + if err := json.Unmarshal(value, &raw); err != nil { + return err + } + type Plain DecoratedPlanner + var plain Plain + if err := json.Unmarshal(value, &plain); err != nil { + return err + } + if v, ok := raw["decorator"]; !ok || v == nil { + plain.Decorator = DecoratedPlannerDecorator{ + Color: "#ffffff", + Theme: nil, + } + } + *j = DecoratedPlanner(plain) + return nil +} + type DefaultPlanner struct { // Event corresponds to the JSON schema field "event". Event *Event `json:"event,omitempty" yaml:"event,omitempty" mapstructure:"event,omitempty"` @@ -41,29 +119,38 @@ type EventName string const EventNameBIRTHDAY EventName = "BIRTHDAY" const EventNameGAME EventName = "GAME" +const EventNameHOLIDAY EventName = "HOLIDAY" -// UnmarshalYAML implements yaml.Unmarshaler. -func (j *DecoratedPlannerDecorator) UnmarshalYAML(value *yaml.Node) error { - var raw map[string]interface{} - if err := value.Decode(&raw); err != nil { +var enumValues_EventName = []interface{}{ + "BIRTHDAY", + "GAME", + "HOLIDAY", +} + +// UnmarshalJSON implements json.Unmarshaler. +func (j *EventName) UnmarshalJSON(b []byte) error { + var v string + if err := json.Unmarshal(b, &v); err != nil { return err } - type Plain DecoratedPlannerDecorator - var plain Plain - if err := value.Decode(&plain); err != nil { - return err + var ok bool + for _, expected := range enumValues_EventName { + if reflect.DeepEqual(v, expected) { + ok = true + break + } } - if v, ok := raw["color"]; !ok || v == nil { - plain.Color = "#ffffff" + if !ok { + return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EventName, v) } - *j = DecoratedPlannerDecorator(plain) + *j = EventName(v) return nil } -// UnmarshalJSON implements json.Unmarshaler. -func (j *EventName) UnmarshalJSON(b []byte) error { +// UnmarshalYAML implements yaml.Unmarshaler. +func (j *EventName) UnmarshalYAML(value *yaml.Node) error { var v string - if err := json.Unmarshal(b, &v); err != nil { + if err := value.Decode(&v); err != nil { return err } var ok bool @@ -80,10 +167,13 @@ func (j *EventName) UnmarshalJSON(b []byte) error { return nil } -const EventNameHOLIDAY EventName = "HOLIDAY" - type EventTagsElem string +const EventTagsElemCITY EventTagsElem = "CITY" +const EventTagsElemCOUNTRY EventTagsElem = "COUNTRY" +const EventTagsElemPERSON EventTagsElem = "PERSON" +const EventTagsElemREGION EventTagsElem = "REGION" + var enumValues_EventTagsElem = []interface{}{ "COUNTRY", "REGION", @@ -91,10 +181,10 @@ var enumValues_EventTagsElem = []interface{}{ "PERSON", } -// UnmarshalJSON implements json.Unmarshaler. -func (j *EventTagsElem) UnmarshalJSON(b []byte) error { +// UnmarshalYAML implements yaml.Unmarshaler. +func (j *EventTagsElem) UnmarshalYAML(value *yaml.Node) error { var v string - if err := json.Unmarshal(b, &v); err != nil { + if err := value.Decode(&v); err != nil { return err } var ok bool @@ -111,10 +201,10 @@ func (j *EventTagsElem) UnmarshalJSON(b []byte) error { return nil } -// UnmarshalYAML implements yaml.Unmarshaler. -func (j *EventTagsElem) UnmarshalYAML(value *yaml.Node) error { +// UnmarshalJSON implements json.Unmarshaler. +func (j *EventTagsElem) UnmarshalJSON(b []byte) error { var v string - if err := value.Decode(&v); err != nil { + if err := json.Unmarshal(b, &v); err != nil { return err } var ok bool @@ -131,17 +221,6 @@ func (j *EventTagsElem) UnmarshalYAML(value *yaml.Node) error { return nil } -const EventTagsElemCOUNTRY EventTagsElem = "COUNTRY" -const EventTagsElemREGION EventTagsElem = "REGION" -const EventTagsElemCITY EventTagsElem = "CITY" -const EventTagsElemPERSON EventTagsElem = "PERSON" - -var enumValues_EventName = []interface{}{ - "BIRTHDAY", - "GAME", - "HOLIDAY", -} - // UnmarshalJSON implements json.Unmarshaler. func (j *Event) UnmarshalJSON(value []byte) error { var raw map[string]interface{} @@ -178,84 +257,20 @@ func (j *Event) UnmarshalYAML(value *yaml.Node) error { return nil } -// UnmarshalYAML implements yaml.Unmarshaler. -func (j *EventName) UnmarshalYAML(value *yaml.Node) error { - var v string - if err := value.Decode(&v); err != nil { - return err - } - var ok bool - for _, expected := range enumValues_EventName { - if reflect.DeepEqual(v, expected) { - ok = true - break - } - } - if !ok { - return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_EventName, v) - } - *j = EventName(v) - return nil -} +type ObjectPropertiesDefault struct { + // Active corresponds to the JSON schema field "active". + Active interface{} `json:"active,omitempty" yaml:"active,omitempty" mapstructure:"active,omitempty"` -// UnmarshalJSON implements json.Unmarshaler. -func (j *DecoratedPlanner) UnmarshalJSON(value []byte) error { - var raw map[string]interface{} - if err := json.Unmarshal(value, &raw); err != nil { - return err - } - type Plain DecoratedPlanner - var plain Plain - if err := json.Unmarshal(value, &plain); err != nil { - return err - } - if v, ok := raw["decorator"]; !ok || v == nil { - plain.Decorator = DecoratedPlannerDecorator{ - Color: "#ffffff", - Theme: nil, - } - } - *j = DecoratedPlanner(plain) - return nil + // Planners corresponds to the JSON schema field "planners". + Planners []ObjectPropertiesDefaultPlannersElem `json:"planners,omitempty" yaml:"planners,omitempty" mapstructure:"planners,omitempty"` } -// UnmarshalYAML implements yaml.Unmarshaler. -func (j *DecoratedPlanner) UnmarshalYAML(value *yaml.Node) error { - var raw map[string]interface{} - if err := value.Decode(&raw); err != nil { - return err - } - type Plain DecoratedPlanner - var plain Plain - if err := value.Decode(&plain); err != nil { - return err - } - if v, ok := raw["decorator"]; !ok || v == nil { - plain.Decorator = DecoratedPlannerDecorator{ - Color: "#ffffff", - Theme: nil, - } - } - *j = DecoratedPlanner(plain) - return nil -} +type ObjectPropertiesDefaultPlannersElem struct { + // Decorated corresponds to the JSON schema field "decorated". + Decorated *DecoratedPlanner `json:"decorated,omitempty" yaml:"decorated,omitempty" mapstructure:"decorated,omitempty"` -// UnmarshalJSON implements json.Unmarshaler. -func (j *DecoratedPlannerDecorator) UnmarshalJSON(value []byte) error { - var raw map[string]interface{} - if err := json.Unmarshal(value, &raw); err != nil { - return err - } - type Plain DecoratedPlannerDecorator - var plain Plain - if err := json.Unmarshal(value, &plain); err != nil { - return err - } - if v, ok := raw["color"]; !ok || v == nil { - plain.Color = "#ffffff" - } - *j = DecoratedPlannerDecorator(plain) - return nil + // Plain corresponds to the JSON schema field "plain". + Plain *DefaultPlanner `json:"plain,omitempty" yaml:"plain,omitempty" mapstructure:"plain,omitempty"` } type ObjectPropertiesDefaultPlannersElem_0 struct { @@ -263,30 +278,30 @@ type ObjectPropertiesDefaultPlannersElem_0 struct { Plain *DefaultPlanner `json:"plain,omitempty" yaml:"plain,omitempty" mapstructure:"plain,omitempty"` } -// UnmarshalJSON implements json.Unmarshaler. -func (j *ObjectPropertiesDefaultPlannersElem_0) UnmarshalJSON(value []byte) error { +// UnmarshalYAML implements yaml.Unmarshaler. +func (j *ObjectPropertiesDefaultPlannersElem_0) UnmarshalYAML(value *yaml.Node) error { var raw map[string]interface{} - if err := json.Unmarshal(value, &raw); err != nil { + if err := value.Decode(&raw); err != nil { return err } type Plain ObjectPropertiesDefaultPlannersElem_0 var plain Plain - if err := json.Unmarshal(value, &plain); err != nil { + if err := value.Decode(&plain); err != nil { return err } *j = ObjectPropertiesDefaultPlannersElem_0(plain) return nil } -// UnmarshalYAML implements yaml.Unmarshaler. -func (j *ObjectPropertiesDefaultPlannersElem_0) UnmarshalYAML(value *yaml.Node) error { +// UnmarshalJSON implements json.Unmarshaler. +func (j *ObjectPropertiesDefaultPlannersElem_0) UnmarshalJSON(value []byte) error { var raw map[string]interface{} - if err := value.Decode(&raw); err != nil { + if err := json.Unmarshal(value, &raw); err != nil { return err } type Plain ObjectPropertiesDefaultPlannersElem_0 var plain Plain - if err := value.Decode(&plain); err != nil { + if err := json.Unmarshal(value, &plain); err != nil { return err } *j = ObjectPropertiesDefaultPlannersElem_0(plain) @@ -328,14 +343,6 @@ func (j *ObjectPropertiesDefaultPlannersElem_1) UnmarshalYAML(value *yaml.Node) return nil } -type ObjectPropertiesDefaultPlannersElem struct { - // Decorated corresponds to the JSON schema field "decorated". - Decorated *DecoratedPlanner `json:"decorated,omitempty" yaml:"decorated,omitempty" mapstructure:"decorated,omitempty"` - - // Plain corresponds to the JSON schema field "plain". - Plain *DefaultPlanner `json:"plain,omitempty" yaml:"plain,omitempty" mapstructure:"plain,omitempty"` -} - // UnmarshalJSON implements json.Unmarshaler. func (j *ObjectPropertiesDefaultPlannersElem) UnmarshalJSON(value []byte) error { var raw map[string]interface{} @@ -389,11 +396,3 @@ func (j *ObjectPropertiesDefaultPlannersElem) UnmarshalYAML(value *yaml.Node) er *j = ObjectPropertiesDefaultPlannersElem(plain) return nil } - -type ObjectPropertiesDefault struct { - // Active corresponds to the JSON schema field "active". - Active interface{} `json:"active,omitempty" yaml:"active,omitempty" mapstructure:"active,omitempty"` - - // Planners corresponds to the JSON schema field "planners". - Planners []ObjectPropertiesDefaultPlannersElem `json:"planners,omitempty" yaml:"planners,omitempty" mapstructure:"planners,omitempty"` -} diff --git a/tests/data/misc/specialCharacters/specialCharacters.go b/tests/data/misc/specialCharacters/specialCharacters.go index da25bfaa..27b0f929 100644 --- a/tests/data/misc/specialCharacters/specialCharacters.go +++ b/tests/data/misc/specialCharacters/specialCharacters.go @@ -12,44 +12,61 @@ type License string const LicenseGPL30 License = "GPL-3.0" const LicenseMIT License = "MIT" -type SpecialCharacters struct { - // PlainLicenses corresponds to the JSON schema field "plainLicenses". - PlainLicenses *SpecialCharactersPlainLicenses `json:"plainLicenses,omitempty" yaml:"plainLicenses,omitempty" mapstructure:"plainLicenses,omitempty"` - - // PlainLicensesRef corresponds to the JSON schema field "plainLicensesRef". - PlainLicensesRef []License `json:"plainLicensesRef,omitempty" yaml:"plainLicensesRef,omitempty" mapstructure:"plainLicensesRef,omitempty"` +type License_1 string - // PlusLicenses corresponds to the JSON schema field "plusLicenses". - PlusLicenses *SpecialCharactersPlusLicenses `json:"plusLicenses,omitempty" yaml:"plusLicenses,omitempty" mapstructure:"plusLicenses,omitempty"` +const License_1_GPL30 License_1 = "GPL-3.0+" +const License_1_MIT License_1 = "MIT+" - // PlusLicensesRef corresponds to the JSON schema field "plusLicensesRef". - PlusLicensesRef []License `json:"plusLicensesRef,omitempty" yaml:"plusLicensesRef,omitempty" mapstructure:"plusLicensesRef,omitempty"` +var enumValues_License_1 = []interface{}{ + "GPL-3.0+", + "MIT+", } -type SpecialCharactersPlainLicenses string - -const SpecialCharactersPlainLicensesGPL30 SpecialCharactersPlainLicenses = "GPL-3.0" +// UnmarshalYAML implements yaml.Unmarshaler. +func (j *License_1) UnmarshalYAML(value *yaml.Node) error { + var v string + if err := value.Decode(&v); err != nil { + return err + } + var ok bool + for _, expected := range enumValues_License_1 { + if reflect.DeepEqual(v, expected) { + ok = true + break + } + } + if !ok { + return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_License_1, v) + } + *j = License_1(v) + return nil +} // UnmarshalJSON implements json.Unmarshaler. -func (j *License) UnmarshalJSON(b []byte) error { +func (j *License_1) UnmarshalJSON(b []byte) error { var v string if err := json.Unmarshal(b, &v); err != nil { return err } var ok bool - for _, expected := range enumValues_License { + for _, expected := range enumValues_License_1 { if reflect.DeepEqual(v, expected) { ok = true break } } if !ok { - return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_License, v) + return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_License_1, v) } - *j = License(v) + *j = License_1(v) return nil } +var enumValues_License = []interface{}{ + "GPL-3.0", + "MIT", +} + // UnmarshalYAML implements yaml.Unmarshaler. func (j *License) UnmarshalYAML(value *yaml.Node) error { var v string @@ -70,6 +87,43 @@ func (j *License) UnmarshalYAML(value *yaml.Node) error { return nil } +// UnmarshalJSON implements json.Unmarshaler. +func (j *License) UnmarshalJSON(b []byte) error { + var v string + if err := json.Unmarshal(b, &v); err != nil { + return err + } + var ok bool + for _, expected := range enumValues_License { + if reflect.DeepEqual(v, expected) { + ok = true + break + } + } + if !ok { + return fmt.Errorf("invalid value (expected one of %#v): %#v", enumValues_License, v) + } + *j = License(v) + return nil +} + +type SpecialCharacters struct { + // PlainLicenses corresponds to the JSON schema field "plainLicenses". + PlainLicenses *SpecialCharactersPlainLicenses `json:"plainLicenses,omitempty" yaml:"plainLicenses,omitempty" mapstructure:"plainLicenses,omitempty"` + + // PlainLicensesRef corresponds to the JSON schema field "plainLicensesRef". + PlainLicensesRef []License `json:"plainLicensesRef,omitempty" yaml:"plainLicensesRef,omitempty" mapstructure:"plainLicensesRef,omitempty"` + + // PlusLicenses corresponds to the JSON schema field "plusLicenses". + PlusLicenses *SpecialCharactersPlusLicenses `json:"plusLicenses,omitempty" yaml:"plusLicenses,omitempty" mapstructure:"plusLicenses,omitempty"` + + // PlusLicensesRef corresponds to the JSON schema field "plusLicensesRef". + PlusLicensesRef []License_1 `json:"plusLicensesRef,omitempty" yaml:"plusLicensesRef,omitempty" mapstructure:"plusLicensesRef,omitempty"` +} + +type SpecialCharactersPlainLicenses string + +const SpecialCharactersPlainLicensesGPL30 SpecialCharactersPlainLicenses = "GPL-3.0" const SpecialCharactersPlainLicensesMIT SpecialCharactersPlainLicenses = "MIT" var enumValues_SpecialCharactersPlainLicenses = []interface{}{ @@ -97,8 +151,6 @@ func (j *SpecialCharactersPlainLicenses) UnmarshalJSON(b []byte) error { return nil } -type SpecialCharactersPlusLicenses string - // UnmarshalYAML implements yaml.Unmarshaler. func (j *SpecialCharactersPlainLicenses) UnmarshalYAML(value *yaml.Node) error { var v string @@ -119,6 +171,11 @@ func (j *SpecialCharactersPlainLicenses) UnmarshalYAML(value *yaml.Node) error { return nil } +type SpecialCharactersPlusLicenses string + +const SpecialCharactersPlusLicensesGPL30 SpecialCharactersPlusLicenses = "GPL-3.0+" +const SpecialCharactersPlusLicensesMIT SpecialCharactersPlusLicenses = "MIT+" + var enumValues_SpecialCharactersPlusLicenses = []interface{}{ "GPL-3.0+", "MIT+", @@ -163,11 +220,3 @@ func (j *SpecialCharactersPlusLicenses) UnmarshalYAML(value *yaml.Node) error { *j = SpecialCharactersPlusLicenses(v) return nil } - -const SpecialCharactersPlusLicensesGPL30 SpecialCharactersPlusLicenses = "GPL-3.0+" -const SpecialCharactersPlusLicensesMIT SpecialCharactersPlusLicenses = "MIT+" - -var enumValues_License = []interface{}{ - "GPL-3.0", - "MIT", -} diff --git a/tests/data/validation/enum/enum.go b/tests/data/validation/enum/enum.go index 3377e20f..ec2f692d 100644 --- a/tests/data/validation/enum/enum.go +++ b/tests/data/validation/enum/enum.go @@ -7,6 +7,42 @@ import "fmt" import yaml "gopkg.in/yaml.v3" import "reflect" +type Enum struct { + // MyBooleanTypedEnum corresponds to the JSON schema field "myBooleanTypedEnum". + MyBooleanTypedEnum *EnumMyBooleanTypedEnum `json:"myBooleanTypedEnum,omitempty" yaml:"myBooleanTypedEnum,omitempty" mapstructure:"myBooleanTypedEnum,omitempty"` + + // MyBooleanUntypedEnum corresponds to the JSON schema field + // "myBooleanUntypedEnum". + MyBooleanUntypedEnum *EnumMyBooleanUntypedEnum `json:"myBooleanUntypedEnum,omitempty" yaml:"myBooleanUntypedEnum,omitempty" mapstructure:"myBooleanUntypedEnum,omitempty"` + + // MyIntegerTypedEnum corresponds to the JSON schema field "myIntegerTypedEnum". + MyIntegerTypedEnum *EnumMyIntegerTypedEnum `json:"myIntegerTypedEnum,omitempty" yaml:"myIntegerTypedEnum,omitempty" mapstructure:"myIntegerTypedEnum,omitempty"` + + // MyMixedTypeEnum corresponds to the JSON schema field "myMixedTypeEnum". + MyMixedTypeEnum *EnumMyMixedTypeEnum `json:"myMixedTypeEnum,omitempty" yaml:"myMixedTypeEnum,omitempty" mapstructure:"myMixedTypeEnum,omitempty"` + + // MyMixedUntypedEnum corresponds to the JSON schema field "myMixedUntypedEnum". + MyMixedUntypedEnum *EnumMyMixedUntypedEnum `json:"myMixedUntypedEnum,omitempty" yaml:"myMixedUntypedEnum,omitempty" mapstructure:"myMixedUntypedEnum,omitempty"` + + // MyNullTypedEnum corresponds to the JSON schema field "myNullTypedEnum". + MyNullTypedEnum *EnumMyNullTypedEnum `json:"myNullTypedEnum,omitempty" yaml:"myNullTypedEnum,omitempty" mapstructure:"myNullTypedEnum,omitempty"` + + // MyNullUntypedEnum corresponds to the JSON schema field "myNullUntypedEnum". + MyNullUntypedEnum *EnumMyNullUntypedEnum `json:"myNullUntypedEnum,omitempty" yaml:"myNullUntypedEnum,omitempty" mapstructure:"myNullUntypedEnum,omitempty"` + + // MyNumberTypedEnum corresponds to the JSON schema field "myNumberTypedEnum". + MyNumberTypedEnum *EnumMyNumberTypedEnum `json:"myNumberTypedEnum,omitempty" yaml:"myNumberTypedEnum,omitempty" mapstructure:"myNumberTypedEnum,omitempty"` + + // MyNumberUntypedEnum corresponds to the JSON schema field "myNumberUntypedEnum". + MyNumberUntypedEnum *EnumMyNumberUntypedEnum `json:"myNumberUntypedEnum,omitempty" yaml:"myNumberUntypedEnum,omitempty" mapstructure:"myNumberUntypedEnum,omitempty"` + + // MyStringTypedEnum corresponds to the JSON schema field "myStringTypedEnum". + MyStringTypedEnum *EnumMyStringTypedEnum `json:"myStringTypedEnum,omitempty" yaml:"myStringTypedEnum,omitempty" mapstructure:"myStringTypedEnum,omitempty"` + + // MyStringUntypedEnum corresponds to the JSON schema field "myStringUntypedEnum". + MyStringUntypedEnum *EnumMyStringUntypedEnum `json:"myStringUntypedEnum,omitempty" yaml:"myStringUntypedEnum,omitempty" mapstructure:"myStringUntypedEnum,omitempty"` +} + type EnumMyBooleanTypedEnum bool var enumValues_EnumMyBooleanTypedEnum = []interface{}{ @@ -153,22 +189,27 @@ type EnumMyMixedTypeEnum struct { Value interface{} } -var enumValues_EnumMyMixedTypeEnum = []interface{}{ - 42.0, - "smurf", -} - // MarshalJSON implements json.Marshaler. func (j *EnumMyMixedTypeEnum) MarshalJSON() ([]byte, error) { return json.Marshal(j.Value) } -// UnmarshalJSON implements json.Unmarshaler. -func (j *EnumMyMixedTypeEnum) UnmarshalJSON(b []byte) error { +// MarshalYAML implements yaml.Marshal. +func (j *EnumMyMixedTypeEnum) MarshalYAML() (interface{}, error) { + return yaml.Marshal(j.Value) +} + +var enumValues_EnumMyMixedTypeEnum = []interface{}{ + 42.0, + "smurf", +} + +// UnmarshalYAML implements yaml.Unmarshaler. +func (j *EnumMyMixedTypeEnum) UnmarshalYAML(value *yaml.Node) error { var v struct { Value interface{} } - if err := json.Unmarshal(b, &v.Value); err != nil { + if err := value.Decode(&v.Value); err != nil { return err } var ok bool @@ -185,17 +226,12 @@ func (j *EnumMyMixedTypeEnum) UnmarshalJSON(b []byte) error { return nil } -// MarshalYAML implements yaml.Marshal. -func (j *EnumMyMixedTypeEnum) MarshalYAML() (interface{}, error) { - return yaml.Marshal(j.Value) -} - -// UnmarshalYAML implements yaml.Unmarshaler. -func (j *EnumMyMixedTypeEnum) UnmarshalYAML(value *yaml.Node) error { +// UnmarshalJSON implements json.Unmarshaler. +func (j *EnumMyMixedTypeEnum) UnmarshalJSON(b []byte) error { var v struct { Value interface{} } - if err := value.Decode(&v.Value); err != nil { + if err := json.Unmarshal(b, &v.Value); err != nil { return err } var ok bool @@ -216,6 +252,16 @@ type EnumMyMixedUntypedEnum struct { Value interface{} } +// MarshalJSON implements json.Marshaler. +func (j *EnumMyMixedUntypedEnum) MarshalJSON() ([]byte, error) { + return json.Marshal(j.Value) +} + +// MarshalYAML implements yaml.Marshal. +func (j *EnumMyMixedUntypedEnum) MarshalYAML() (interface{}, error) { + return yaml.Marshal(j.Value) +} + var enumValues_EnumMyMixedUntypedEnum = []interface{}{ "red", 1.0, @@ -223,11 +269,6 @@ var enumValues_EnumMyMixedUntypedEnum = []interface{}{ nil, } -// MarshalJSON implements json.Marshaler. -func (j *EnumMyMixedUntypedEnum) MarshalJSON() ([]byte, error) { - return json.Marshal(j.Value) -} - // UnmarshalJSON implements json.Unmarshaler. func (j *EnumMyMixedUntypedEnum) UnmarshalJSON(b []byte) error { var v struct { @@ -250,11 +291,6 @@ func (j *EnumMyMixedUntypedEnum) UnmarshalJSON(b []byte) error { return nil } -// MarshalYAML implements yaml.Marshal. -func (j *EnumMyMixedUntypedEnum) MarshalYAML() (interface{}, error) { - return yaml.Marshal(j.Value) -} - // UnmarshalYAML implements yaml.Unmarshaler. func (j *EnumMyMixedUntypedEnum) UnmarshalYAML(value *yaml.Node) error { var v struct { @@ -281,15 +317,20 @@ type EnumMyNullTypedEnum struct { Value interface{} } -var enumValues_EnumMyNullTypedEnum = []interface{}{ - nil, -} - // MarshalJSON implements json.Marshaler. func (j *EnumMyNullTypedEnum) MarshalJSON() ([]byte, error) { return json.Marshal(j.Value) } +// MarshalYAML implements yaml.Marshal. +func (j *EnumMyNullTypedEnum) MarshalYAML() (interface{}, error) { + return yaml.Marshal(j.Value) +} + +var enumValues_EnumMyNullTypedEnum = []interface{}{ + nil, +} + // UnmarshalJSON implements json.Unmarshaler. func (j *EnumMyNullTypedEnum) UnmarshalJSON(b []byte) error { var v struct { @@ -312,11 +353,6 @@ func (j *EnumMyNullTypedEnum) UnmarshalJSON(b []byte) error { return nil } -// MarshalYAML implements yaml.Marshal. -func (j *EnumMyNullTypedEnum) MarshalYAML() (interface{}, error) { - return yaml.Marshal(j.Value) -} - // UnmarshalYAML implements yaml.Unmarshaler. func (j *EnumMyNullTypedEnum) UnmarshalYAML(value *yaml.Node) error { var v struct { @@ -339,10 +375,6 @@ func (j *EnumMyNullTypedEnum) UnmarshalYAML(value *yaml.Node) error { return nil } -var enumValues_EnumMyNullUntypedEnum = []interface{}{ - nil, -} - type EnumMyNullUntypedEnum struct { Value interface{} } @@ -352,6 +384,15 @@ func (j *EnumMyNullUntypedEnum) MarshalJSON() ([]byte, error) { return json.Marshal(j.Value) } +// MarshalYAML implements yaml.Marshal. +func (j *EnumMyNullUntypedEnum) MarshalYAML() (interface{}, error) { + return yaml.Marshal(j.Value) +} + +var enumValues_EnumMyNullUntypedEnum = []interface{}{ + nil, +} + // UnmarshalJSON implements json.Unmarshaler. func (j *EnumMyNullUntypedEnum) UnmarshalJSON(b []byte) error { var v struct { @@ -374,11 +415,6 @@ func (j *EnumMyNullUntypedEnum) UnmarshalJSON(b []byte) error { return nil } -// MarshalYAML implements yaml.Marshal. -func (j *EnumMyNullUntypedEnum) MarshalYAML() (interface{}, error) { - return yaml.Marshal(j.Value) -} - // UnmarshalYAML implements yaml.Unmarshaler. func (j *EnumMyNullUntypedEnum) UnmarshalYAML(value *yaml.Node) error { var v struct { @@ -499,6 +535,10 @@ func (j *EnumMyNumberUntypedEnum) UnmarshalYAML(value *yaml.Node) error { type EnumMyStringTypedEnum string +const EnumMyStringTypedEnumBlue EnumMyStringTypedEnum = "blue" +const EnumMyStringTypedEnumGreen EnumMyStringTypedEnum = "green" +const EnumMyStringTypedEnumRed EnumMyStringTypedEnum = "red" + var enumValues_EnumMyStringTypedEnum = []interface{}{ "red", "blue", @@ -545,22 +585,22 @@ func (j *EnumMyStringTypedEnum) UnmarshalYAML(value *yaml.Node) error { return nil } -const EnumMyStringTypedEnumBlue EnumMyStringTypedEnum = "blue" -const EnumMyStringTypedEnumGreen EnumMyStringTypedEnum = "green" -const EnumMyStringTypedEnumRed EnumMyStringTypedEnum = "red" - type EnumMyStringUntypedEnum string +const EnumMyStringUntypedEnumBlue EnumMyStringUntypedEnum = "blue" +const EnumMyStringUntypedEnumGreen EnumMyStringUntypedEnum = "green" +const EnumMyStringUntypedEnumRed EnumMyStringUntypedEnum = "red" + var enumValues_EnumMyStringUntypedEnum = []interface{}{ "red", "blue", "green", } -// UnmarshalJSON implements json.Unmarshaler. -func (j *EnumMyStringUntypedEnum) UnmarshalJSON(b []byte) error { +// UnmarshalYAML implements yaml.Unmarshaler. +func (j *EnumMyStringUntypedEnum) UnmarshalYAML(value *yaml.Node) error { var v string - if err := json.Unmarshal(b, &v); err != nil { + if err := value.Decode(&v); err != nil { return err } var ok bool @@ -577,10 +617,10 @@ func (j *EnumMyStringUntypedEnum) UnmarshalJSON(b []byte) error { return nil } -// UnmarshalYAML implements yaml.Unmarshaler. -func (j *EnumMyStringUntypedEnum) UnmarshalYAML(value *yaml.Node) error { +// UnmarshalJSON implements json.Unmarshaler. +func (j *EnumMyStringUntypedEnum) UnmarshalJSON(b []byte) error { var v string - if err := value.Decode(&v); err != nil { + if err := json.Unmarshal(b, &v); err != nil { return err } var ok bool @@ -596,43 +636,3 @@ func (j *EnumMyStringUntypedEnum) UnmarshalYAML(value *yaml.Node) error { *j = EnumMyStringUntypedEnum(v) return nil } - -type Enum struct { - // MyBooleanTypedEnum corresponds to the JSON schema field "myBooleanTypedEnum". - MyBooleanTypedEnum *EnumMyBooleanTypedEnum `json:"myBooleanTypedEnum,omitempty" yaml:"myBooleanTypedEnum,omitempty" mapstructure:"myBooleanTypedEnum,omitempty"` - - // MyBooleanUntypedEnum corresponds to the JSON schema field - // "myBooleanUntypedEnum". - MyBooleanUntypedEnum *EnumMyBooleanUntypedEnum `json:"myBooleanUntypedEnum,omitempty" yaml:"myBooleanUntypedEnum,omitempty" mapstructure:"myBooleanUntypedEnum,omitempty"` - - // MyIntegerTypedEnum corresponds to the JSON schema field "myIntegerTypedEnum". - MyIntegerTypedEnum *EnumMyIntegerTypedEnum `json:"myIntegerTypedEnum,omitempty" yaml:"myIntegerTypedEnum,omitempty" mapstructure:"myIntegerTypedEnum,omitempty"` - - // MyMixedTypeEnum corresponds to the JSON schema field "myMixedTypeEnum". - MyMixedTypeEnum *EnumMyMixedTypeEnum `json:"myMixedTypeEnum,omitempty" yaml:"myMixedTypeEnum,omitempty" mapstructure:"myMixedTypeEnum,omitempty"` - - // MyMixedUntypedEnum corresponds to the JSON schema field "myMixedUntypedEnum". - MyMixedUntypedEnum *EnumMyMixedUntypedEnum `json:"myMixedUntypedEnum,omitempty" yaml:"myMixedUntypedEnum,omitempty" mapstructure:"myMixedUntypedEnum,omitempty"` - - // MyNullTypedEnum corresponds to the JSON schema field "myNullTypedEnum". - MyNullTypedEnum *EnumMyNullTypedEnum `json:"myNullTypedEnum,omitempty" yaml:"myNullTypedEnum,omitempty" mapstructure:"myNullTypedEnum,omitempty"` - - // MyNullUntypedEnum corresponds to the JSON schema field "myNullUntypedEnum". - MyNullUntypedEnum *EnumMyNullUntypedEnum `json:"myNullUntypedEnum,omitempty" yaml:"myNullUntypedEnum,omitempty" mapstructure:"myNullUntypedEnum,omitempty"` - - // MyNumberTypedEnum corresponds to the JSON schema field "myNumberTypedEnum". - MyNumberTypedEnum *EnumMyNumberTypedEnum `json:"myNumberTypedEnum,omitempty" yaml:"myNumberTypedEnum,omitempty" mapstructure:"myNumberTypedEnum,omitempty"` - - // MyNumberUntypedEnum corresponds to the JSON schema field "myNumberUntypedEnum". - MyNumberUntypedEnum *EnumMyNumberUntypedEnum `json:"myNumberUntypedEnum,omitempty" yaml:"myNumberUntypedEnum,omitempty" mapstructure:"myNumberUntypedEnum,omitempty"` - - // MyStringTypedEnum corresponds to the JSON schema field "myStringTypedEnum". - MyStringTypedEnum *EnumMyStringTypedEnum `json:"myStringTypedEnum,omitempty" yaml:"myStringTypedEnum,omitempty" mapstructure:"myStringTypedEnum,omitempty"` - - // MyStringUntypedEnum corresponds to the JSON schema field "myStringUntypedEnum". - MyStringUntypedEnum *EnumMyStringUntypedEnum `json:"myStringUntypedEnum,omitempty" yaml:"myStringUntypedEnum,omitempty" mapstructure:"myStringUntypedEnum,omitempty"` -} - -const EnumMyStringUntypedEnumBlue EnumMyStringUntypedEnum = "blue" -const EnumMyStringUntypedEnumGreen EnumMyStringUntypedEnum = "green" -const EnumMyStringUntypedEnumRed EnumMyStringUntypedEnum = "red" diff --git a/tests/data/validation/maxLength/maxLength.go b/tests/data/validation/maxLength/maxLength.go index ca734ecd..5a1ee4b5 100644 --- a/tests/data/validation/maxLength/maxLength.go +++ b/tests/data/validation/maxLength/maxLength.go @@ -44,7 +44,7 @@ func (j *MaxLength) UnmarshalYAML(value *yaml.Node) error { if err := value.Decode(&raw); err != nil { return err } - if v, ok := raw["myString"]; !ok || v == nil { + if _, ok := raw["myString"]; raw != nil && !ok { return fmt.Errorf("field myString in MaxLength: required") } type Plain MaxLength diff --git a/tests/data/validation/minLength/minLength.go b/tests/data/validation/minLength/minLength.go index 1e18295f..5f5c8627 100644 --- a/tests/data/validation/minLength/minLength.go +++ b/tests/data/validation/minLength/minLength.go @@ -44,7 +44,7 @@ func (j *MinLength) UnmarshalYAML(value *yaml.Node) error { if err := value.Decode(&raw); err != nil { return err } - if v, ok := raw["myString"]; !ok || v == nil { + if _, ok := raw["myString"]; raw != nil && !ok { return fmt.Errorf("field myString in MinLength: required") } type Plain MinLength diff --git a/tests/data/validation/requiredFields/requiredFields.go b/tests/data/validation/requiredFields/requiredFields.go index fef61227..8640ede6 100644 --- a/tests/data/validation/requiredFields/requiredFields.go +++ b/tests/data/validation/requiredFields/requiredFields.go @@ -6,128 +6,128 @@ import "encoding/json" import "fmt" import yaml "gopkg.in/yaml.v3" +type RequiredFields struct { + // MyBoolean corresponds to the JSON schema field "myBoolean". + MyBoolean bool `json:"myBoolean" yaml:"myBoolean" mapstructure:"myBoolean"` + + // MyBooleanArray corresponds to the JSON schema field "myBooleanArray". + MyBooleanArray []bool `json:"myBooleanArray" yaml:"myBooleanArray" mapstructure:"myBooleanArray"` + + // MyInteger corresponds to the JSON schema field "myInteger". + MyInteger *int `json:"myInteger,omitempty" yaml:"myInteger,omitempty" mapstructure:"myInteger,omitempty"` + + // MyIntegerArray corresponds to the JSON schema field "myIntegerArray". + MyIntegerArray []int `json:"myIntegerArray,omitempty" yaml:"myIntegerArray,omitempty" mapstructure:"myIntegerArray,omitempty"` + + // MyNull corresponds to the JSON schema field "myNull". + MyNull interface{} `json:"myNull" yaml:"myNull" mapstructure:"myNull"` + + // MyNullArray corresponds to the JSON schema field "myNullArray". + MyNullArray []interface{} `json:"myNullArray" yaml:"myNullArray" mapstructure:"myNullArray"` + + // MyNumber corresponds to the JSON schema field "myNumber". + MyNumber float64 `json:"myNumber" yaml:"myNumber" mapstructure:"myNumber"` + + // MyNumberArray corresponds to the JSON schema field "myNumberArray". + MyNumberArray []float64 `json:"myNumberArray" yaml:"myNumberArray" mapstructure:"myNumberArray"` + + // MyObject corresponds to the JSON schema field "myObject". + MyObject RequiredFieldsMyObject `json:"myObject" yaml:"myObject" mapstructure:"myObject"` + + // MyObjectArray corresponds to the JSON schema field "myObjectArray". + MyObjectArray []RequiredFieldsMyObjectArrayElem `json:"myObjectArray" yaml:"myObjectArray" mapstructure:"myObjectArray"` + + // MyString corresponds to the JSON schema field "myString". + MyString string `json:"myString" yaml:"myString" mapstructure:"myString"` + + // MyStringArray corresponds to the JSON schema field "myStringArray". + MyStringArray []string `json:"myStringArray" yaml:"myStringArray" mapstructure:"myStringArray"` +} + type RequiredFieldsMyObject struct { // MyNestedObjectString corresponds to the JSON schema field // "myNestedObjectString". MyNestedObjectString string `json:"myNestedObjectString" yaml:"myNestedObjectString" mapstructure:"myNestedObjectString"` } +type RequiredFieldsMyObjectArrayElem struct { + // MyNestedObjectString corresponds to the JSON schema field + // "myNestedObjectString". + MyNestedObjectString string `json:"myNestedObjectString" yaml:"myNestedObjectString" mapstructure:"myNestedObjectString"` +} + // UnmarshalJSON implements json.Unmarshaler. -func (j *RequiredFieldsMyObject) UnmarshalJSON(value []byte) error { +func (j *RequiredFieldsMyObjectArrayElem) UnmarshalJSON(value []byte) error { var raw map[string]interface{} if err := json.Unmarshal(value, &raw); err != nil { return err } - if v, ok := raw["myNestedObjectString"]; !ok || v == nil { - return fmt.Errorf("field myNestedObjectString in RequiredFieldsMyObject: required") + if _, ok := raw["myNestedObjectString"]; raw != nil && !ok { + return fmt.Errorf("field myNestedObjectString in RequiredFieldsMyObjectArrayElem: required") } - type Plain RequiredFieldsMyObject + type Plain RequiredFieldsMyObjectArrayElem var plain Plain if err := json.Unmarshal(value, &plain); err != nil { return err } - *j = RequiredFieldsMyObject(plain) + *j = RequiredFieldsMyObjectArrayElem(plain) return nil } // UnmarshalYAML implements yaml.Unmarshaler. -func (j *RequiredFieldsMyObject) UnmarshalYAML(value *yaml.Node) error { +func (j *RequiredFieldsMyObjectArrayElem) UnmarshalYAML(value *yaml.Node) error { var raw map[string]interface{} if err := value.Decode(&raw); err != nil { return err } - if v, ok := raw["myNestedObjectString"]; !ok || v == nil { - return fmt.Errorf("field myNestedObjectString in RequiredFieldsMyObject: required") + if _, ok := raw["myNestedObjectString"]; raw != nil && !ok { + return fmt.Errorf("field myNestedObjectString in RequiredFieldsMyObjectArrayElem: required") } - type Plain RequiredFieldsMyObject + type Plain RequiredFieldsMyObjectArrayElem var plain Plain if err := value.Decode(&plain); err != nil { return err } - *j = RequiredFieldsMyObject(plain) + *j = RequiredFieldsMyObjectArrayElem(plain) return nil } -type RequiredFieldsMyObjectArrayElem struct { - // MyNestedObjectString corresponds to the JSON schema field - // "myNestedObjectString". - MyNestedObjectString string `json:"myNestedObjectString" yaml:"myNestedObjectString" mapstructure:"myNestedObjectString"` -} - // UnmarshalJSON implements json.Unmarshaler. -func (j *RequiredFieldsMyObjectArrayElem) UnmarshalJSON(value []byte) error { +func (j *RequiredFieldsMyObject) UnmarshalJSON(value []byte) error { var raw map[string]interface{} if err := json.Unmarshal(value, &raw); err != nil { return err } - if v, ok := raw["myNestedObjectString"]; !ok || v == nil { - return fmt.Errorf("field myNestedObjectString in RequiredFieldsMyObjectArrayElem: required") + if _, ok := raw["myNestedObjectString"]; raw != nil && !ok { + return fmt.Errorf("field myNestedObjectString in RequiredFieldsMyObject: required") } - type Plain RequiredFieldsMyObjectArrayElem + type Plain RequiredFieldsMyObject var plain Plain if err := json.Unmarshal(value, &plain); err != nil { return err } - *j = RequiredFieldsMyObjectArrayElem(plain) + *j = RequiredFieldsMyObject(plain) return nil } // UnmarshalYAML implements yaml.Unmarshaler. -func (j *RequiredFieldsMyObjectArrayElem) UnmarshalYAML(value *yaml.Node) error { +func (j *RequiredFieldsMyObject) UnmarshalYAML(value *yaml.Node) error { var raw map[string]interface{} if err := value.Decode(&raw); err != nil { return err } - if v, ok := raw["myNestedObjectString"]; !ok || v == nil { - return fmt.Errorf("field myNestedObjectString in RequiredFieldsMyObjectArrayElem: required") + if _, ok := raw["myNestedObjectString"]; raw != nil && !ok { + return fmt.Errorf("field myNestedObjectString in RequiredFieldsMyObject: required") } - type Plain RequiredFieldsMyObjectArrayElem + type Plain RequiredFieldsMyObject var plain Plain if err := value.Decode(&plain); err != nil { return err } - *j = RequiredFieldsMyObjectArrayElem(plain) + *j = RequiredFieldsMyObject(plain) return nil } -type RequiredFields struct { - // MyBoolean corresponds to the JSON schema field "myBoolean". - MyBoolean bool `json:"myBoolean" yaml:"myBoolean" mapstructure:"myBoolean"` - - // MyBooleanArray corresponds to the JSON schema field "myBooleanArray". - MyBooleanArray []bool `json:"myBooleanArray" yaml:"myBooleanArray" mapstructure:"myBooleanArray"` - - // MyInteger corresponds to the JSON schema field "myInteger". - MyInteger *int `json:"myInteger,omitempty" yaml:"myInteger,omitempty" mapstructure:"myInteger,omitempty"` - - // MyIntegerArray corresponds to the JSON schema field "myIntegerArray". - MyIntegerArray []int `json:"myIntegerArray,omitempty" yaml:"myIntegerArray,omitempty" mapstructure:"myIntegerArray,omitempty"` - - // MyNull corresponds to the JSON schema field "myNull". - MyNull interface{} `json:"myNull" yaml:"myNull" mapstructure:"myNull"` - - // MyNullArray corresponds to the JSON schema field "myNullArray". - MyNullArray []interface{} `json:"myNullArray" yaml:"myNullArray" mapstructure:"myNullArray"` - - // MyNumber corresponds to the JSON schema field "myNumber". - MyNumber float64 `json:"myNumber" yaml:"myNumber" mapstructure:"myNumber"` - - // MyNumberArray corresponds to the JSON schema field "myNumberArray". - MyNumberArray []float64 `json:"myNumberArray" yaml:"myNumberArray" mapstructure:"myNumberArray"` - - // MyObject corresponds to the JSON schema field "myObject". - MyObject RequiredFieldsMyObject `json:"myObject" yaml:"myObject" mapstructure:"myObject"` - - // MyObjectArray corresponds to the JSON schema field "myObjectArray". - MyObjectArray []RequiredFieldsMyObjectArrayElem `json:"myObjectArray" yaml:"myObjectArray" mapstructure:"myObjectArray"` - - // MyString corresponds to the JSON schema field "myString". - MyString string `json:"myString" yaml:"myString" mapstructure:"myString"` - - // MyStringArray corresponds to the JSON schema field "myStringArray". - MyStringArray []string `json:"myStringArray" yaml:"myStringArray" mapstructure:"myStringArray"` -} - // UnmarshalJSON implements json.Unmarshaler. func (j *RequiredFields) UnmarshalJSON(value []byte) error { var raw map[string]interface{} @@ -187,34 +187,34 @@ func (j *RequiredFields) UnmarshalYAML(value *yaml.Node) error { if err := value.Decode(&raw); err != nil { return err } - if v, ok := raw["myBoolean"]; !ok || v == nil { + if _, ok := raw["myBoolean"]; raw != nil && !ok { return fmt.Errorf("field myBoolean in RequiredFields: required") } - if v, ok := raw["myBooleanArray"]; !ok || v == nil { + if _, ok := raw["myBooleanArray"]; raw != nil && !ok { return fmt.Errorf("field myBooleanArray in RequiredFields: required") } - if v, ok := raw["myNull"]; !ok || v == nil { + if _, ok := raw["myNull"]; raw != nil && !ok { return fmt.Errorf("field myNull in RequiredFields: required") } - if v, ok := raw["myNullArray"]; !ok || v == nil { + if _, ok := raw["myNullArray"]; raw != nil && !ok { return fmt.Errorf("field myNullArray in RequiredFields: required") } - if v, ok := raw["myNumber"]; !ok || v == nil { + if _, ok := raw["myNumber"]; raw != nil && !ok { return fmt.Errorf("field myNumber in RequiredFields: required") } - if v, ok := raw["myNumberArray"]; !ok || v == nil { + if _, ok := raw["myNumberArray"]; raw != nil && !ok { return fmt.Errorf("field myNumberArray in RequiredFields: required") } - if v, ok := raw["myObject"]; !ok || v == nil { + if _, ok := raw["myObject"]; raw != nil && !ok { return fmt.Errorf("field myObject in RequiredFields: required") } - if v, ok := raw["myObjectArray"]; !ok || v == nil { + if _, ok := raw["myObjectArray"]; raw != nil && !ok { return fmt.Errorf("field myObjectArray in RequiredFields: required") } - if v, ok := raw["myString"]; !ok || v == nil { + if _, ok := raw["myString"]; raw != nil && !ok { return fmt.Errorf("field myString in RequiredFields: required") } - if v, ok := raw["myStringArray"]; !ok || v == nil { + if _, ok := raw["myStringArray"]; raw != nil && !ok { return fmt.Errorf("field myStringArray in RequiredFields: required") } type Plain RequiredFields diff --git a/tests/data/validation/requiredFields/requiredNullable.go b/tests/data/validation/requiredFields/requiredNullable.go index f82acba1..5c379ba8 100644 --- a/tests/data/validation/requiredFields/requiredNullable.go +++ b/tests/data/validation/requiredFields/requiredNullable.go @@ -4,6 +4,7 @@ package test import "encoding/json" import "fmt" +import yaml "gopkg.in/yaml.v3" type RequiredNullable struct { // MyNullableObject corresponds to the JSON schema field "myNullableObject". @@ -23,9 +24,9 @@ type RequiredNullableMyNullableObject struct { } // UnmarshalJSON implements json.Unmarshaler. -func (j *RequiredNullableMyNullableObject) UnmarshalJSON(b []byte) error { +func (j *RequiredNullableMyNullableObject) UnmarshalJSON(value []byte) error { var raw map[string]interface{} - if err := json.Unmarshal(b, &raw); err != nil { + if err := json.Unmarshal(value, &raw); err != nil { return err } if _, ok := raw["myNestedProp"]; raw != nil && !ok { @@ -33,7 +34,25 @@ func (j *RequiredNullableMyNullableObject) UnmarshalJSON(b []byte) error { } type Plain RequiredNullableMyNullableObject var plain Plain - if err := json.Unmarshal(b, &plain); err != nil { + if err := json.Unmarshal(value, &plain); err != nil { + return err + } + *j = RequiredNullableMyNullableObject(plain) + return nil +} + +// UnmarshalYAML implements yaml.Unmarshaler. +func (j *RequiredNullableMyNullableObject) UnmarshalYAML(value *yaml.Node) error { + var raw map[string]interface{} + if err := value.Decode(&raw); err != nil { + return err + } + if _, ok := raw["myNestedProp"]; raw != nil && !ok { + return fmt.Errorf("field myNestedProp in RequiredNullableMyNullableObject: required") + } + type Plain RequiredNullableMyNullableObject + var plain Plain + if err := value.Decode(&plain); err != nil { return err } *j = RequiredNullableMyNullableObject(plain) @@ -41,9 +60,33 @@ func (j *RequiredNullableMyNullableObject) UnmarshalJSON(b []byte) error { } // UnmarshalJSON implements json.Unmarshaler. -func (j *RequiredNullable) UnmarshalJSON(b []byte) error { +func (j *RequiredNullable) UnmarshalJSON(value []byte) error { + var raw map[string]interface{} + if err := json.Unmarshal(value, &raw); err != nil { + return err + } + if _, ok := raw["myNullableObject"]; raw != nil && !ok { + return fmt.Errorf("field myNullableObject in RequiredNullable: required") + } + if _, ok := raw["myNullableString"]; raw != nil && !ok { + return fmt.Errorf("field myNullableString in RequiredNullable: required") + } + if _, ok := raw["myNullableStringArray"]; raw != nil && !ok { + return fmt.Errorf("field myNullableStringArray in RequiredNullable: required") + } + type Plain RequiredNullable + var plain Plain + if err := json.Unmarshal(value, &plain); err != nil { + return err + } + *j = RequiredNullable(plain) + return nil +} + +// UnmarshalYAML implements yaml.Unmarshaler. +func (j *RequiredNullable) UnmarshalYAML(value *yaml.Node) error { var raw map[string]interface{} - if err := json.Unmarshal(b, &raw); err != nil { + if err := value.Decode(&raw); err != nil { return err } if _, ok := raw["myNullableObject"]; raw != nil && !ok { @@ -57,7 +100,7 @@ func (j *RequiredNullable) UnmarshalJSON(b []byte) error { } type Plain RequiredNullable var plain Plain - if err := json.Unmarshal(b, &plain); err != nil { + if err := value.Decode(&plain); err != nil { return err } *j = RequiredNullable(plain) diff --git a/tests/generation_test.go b/tests/generation_test.go index 517ea53b..9282c592 100644 --- a/tests/generation_test.go +++ b/tests/generation_test.go @@ -39,7 +39,7 @@ func TestCore(t *testing.T) { func TestValidation(t *testing.T) { t.Parallel() - testExamples(t, basicConfig, "./data/validation") + testExamples(t, basicConfig, "./data/validation/requiredFields") } func TestMiscWithDefaults(t *testing.T) { @@ -155,6 +155,12 @@ func TestExtraImportsYAML(t *testing.T) { testExampleFile(t, cfg, "./data/extraImports/gopkgYAMLv3/gopkgYAMLv3.json") } +func TestRegressions(t *testing.T) { + t.Parallel() + + testExamples(t, basicConfig, "./data/regressions") +} + func testExamples(t *testing.T, cfg generator.Config, dataDir string) { t.Helper() @@ -179,12 +185,6 @@ func testExamples(t *testing.T, cfg generator.Config, dataDir string) { } } -func TestRegressions(t *testing.T) { - t.Parallel() - - testExamples(t, basicConfig, "./data/regressions") -} - func testExampleFile(t *testing.T, cfg generator.Config, fileName string) { t.Helper()