Skip to content

Commit

Permalink
actgardner#193: MarshalJSON preserves avro schema ordering
Browse files Browse the repository at this point in the history
  • Loading branch information
fgalic committed Aug 2, 2022
1 parent 97bdf7e commit e8ec56b
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions v10/generator/flat/templates/record.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,16 +157,26 @@ func (_ {{ .GoType}}) AvroCRC64Fingerprint() []byte {
func (r {{ .GoType }}) MarshalJSON() ([]byte, error) {
var err error
var out, key []byte
out = append(out, '{')
output := make(map[string]json.RawMessage)
{{ range $i, $field := .Fields -}}
output[{{ printf "%q" $field.Name }}], err = json.Marshal(r.{{ $field.GoName}})
if err != nil {
return nil, err
}
return nil, err
}
key, err = json.Marshal({{ printf "%q" $field.Name }})
if err != nil {
return nil, err
}
out = append(out, key...)
out = append(out, ':')
out = append(out, output[{{ printf "%q" $field.Name }}]...)
out = append(out, ',')
{{ end -}}
return json.Marshal(output)
out[len(out)-1] = '}'
return out, nil
}
func (r *{{ .GoType }}) UnmarshalJSON(data []byte) (error) {
var fields map[string]json.RawMessage
if err := json.Unmarshal(data, &fields); err != nil {
Expand Down

0 comments on commit e8ec56b

Please sign in to comment.