// {{classname}} - {{#description}}{{{description}}}{{/description}}{{^description}}struct for {{{classname}}}{{/description}} type {{classname}} struct { {{#oneOf}} {{{.}}} *{{{.}}} {{/oneOf}} } {{#oneOf}} // {{{.}}}As{{classname}} is a convenience function that returns {{{.}}} wrapped in {{classname}} func {{{.}}}As{{classname}}(v *{{{.}}}) {{classname}} { return {{classname}}{ {{{.}}}: v} } {{/oneOf}} // Unmarshal JSON data into one of the pointers in the struct func (dst *{{classname}}) UnmarshalJSON(data []byte) error { var err error {{#isNullable}} // this object is nullable so check if the payload is null or empty string if string(data) == "" || string(data) == "{}" { return nil } {{/isNullable}} {{#useOneOfDiscriminatorLookup}} {{#discriminator}} {{#mappedModels}} {{#-first}} // use discriminator value to speed up the lookup var jsonDict map[string]interface{} err = json.Unmarshal(data, &jsonDict) if err != nil { return fmt.Errorf("Failed to unmarshal JSON into map for the discrimintor lookup.") } {{/-first}} // check if the discriminator value is '{{{mappingName}}}' if jsonDict["{{{propertyBaseName}}}"] == "{{{mappingName}}}" { // try to unmarshal JSON data into {{{modelName}}} err = json.Unmarshal(data, &dst.{{{modelName}}}) if err == nil { return nil // data stored in dst.{{{modelName}}}, return on the first match } else { dst.{{{modelName}}} = nil return fmt.Errorf("Failed to unmarshal {{classname}} as {{{modelName}}}: %s", err.Error()) } } {{/mappedModels}} {{/discriminator}} return nil {{/useOneOfDiscriminatorLookup}} {{^useOneOfDiscriminatorLookup}} match := 0 {{#oneOf}} // try to unmarshal data into {{{.}}} err = json.Unmarshal(data, &dst.{{{.}}}) if err == nil { json{{{.}}}, _ := json.Marshal(dst.{{{.}}}) if string(json{{{.}}}) == "{}" { // empty struct dst.{{{.}}} = nil } else { match++ } } else { dst.{{{.}}} = nil } {{/oneOf}} if match > 1 { // more than 1 match // reset to nil {{#oneOf}} dst.{{{.}}} = nil {{/oneOf}} return errors.New("data matches more than one schema in oneOf({{classname}})") } else if match == 1 { return nil // exactly one match } else { // no match return errors.New("data failed to match schemas in oneOf({{classname}})") } {{/useOneOfDiscriminatorLookup}} } // Marshal data from the first non-nil pointers in the struct to JSON func (src {{classname}}) MarshalJSON() ([]byte, error) { {{#oneOf}} if src.{{{.}}} != nil { return json.Marshal(&src.{{{.}}}) } {{/oneOf}} return nil, nil // no data in oneOf schemas } // Get the actual instance func (obj *{{classname}}) GetActualInstance() (interface{}) { {{#oneOf}} if obj.{{{.}}} != nil { return obj.{{{.}}} } {{/oneOf}} // all schemas are nil return nil } {{>nullable_model}}