package {{package}}
{{#each imports}}
import "{{this}}"
{{/each}}
{{#each aliases~}}
{{ comment 80 "" "// " "" description }}
type {{name}} {{value}}
{{/each~}}
{{#each consts~}}
{{ comment 80 "" "// " "" description }}
const {{name}} {{type_}} = {{value}}
{{/each~}}
{{~#each structs}}
{{ comment 80 "" "// " "" description }}
type {{name}} struct {
{{~#each members}}
{{ comment 80 "" " // " "" description }}
{{name}} {{#if required}}{{value}}{{else}}*{{value}}{{/if}} `json:"{{rename}}"`
{{~/each}}
}
{{/each}}
{{#each discriminators}}
type {{name}} struct {
{{tag}} {{tag_type}} `json:"{{tag_rename}}"`
{{#each members}}
{{name}} `json:"-"`
{{/each}}
}
func (d {{name}}) MarshalJSON() ([]byte, error) {
switch d.{{tag}} {
{{#each members}}
case {{tag_value}}:
return json.Marshal(struct { Tag string `json:"{{../tag_rename}}"`; {{name}} }{ Tag: {{tag_value}}, {{name}}: d.{{name}} })
{{/each}}
default:
panic("unknown discriminator variant")
}
}
func (d *{{name}}) UnmarshalJSON(b []byte) error {
var base struct { Tag string `json:"{{tag_rename}}"` }
if err := json.Unmarshal(b, &base); err != nil {
return err
}
switch base.Tag {
{{#each members}}
case {{tag_value}}:
d.{{../tag}} = {{tag_value}}
return json.Unmarshal(b, &d.{{name}})
{{/each}}
default:
panic("unknown discriminator variant")
}
}
{{/each}}