gojay

high performance JSON encoder/decoder with stream API for Golang
git clone git://git.lair.cx/gojay
Log | Files | Refs | README | LICENSE

commit 7580ec0613f0a3107056360a386da9d652e5da24
parent eb6e5994c712d1e934f6bdd99188ac48317ef3c5
Author: francoispqt <francois@parquet.ninja>
Date:   Wed, 27 Mar 2019 22:02:19 +0800

make generator fail if a field cannot be handled

Diffstat:
Mgojay/codegen/struct.go | 6++++--
Mgojay/codegen/template.go | 12++++--------
2 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/gojay/codegen/struct.go b/gojay/codegen/struct.go @@ -194,7 +194,8 @@ func (s *Struct) generateFieldDecoding(fields []*toolbox.FieldInfo) (string, []s } else if _, k, ok := s.typedFieldDecode(field, field.Type); ok { templateKey = k } else { - templateKey = decodeUnknown + // templateKey = decodeUnknown + return "", nil, fmt.Errorf("Unknown type %s for field %s", field.Type, field.Name) } } if templateKey != -1 { @@ -280,7 +281,8 @@ func (s *Struct) generateFieldEncoding(fields []*toolbox.FieldInfo) ([]string, e } else if _, k, ok := s.typedFieldEncode(field, field.Type); ok { templateKey = k } else { - templateKey = encodeUnknown + // templateKey = decodeUnknown + return "", nil, fmt.Errorf("Unknown type %s for field %s", field.Type, field.Name) } } if templateKey != -1 { diff --git a/gojay/codegen/template.go b/gojay/codegen/template.go @@ -116,15 +116,11 @@ var fieldTemplate = map[int]string{ enc.SQLNull{{.NullType}}Key{{.OmitEmpty}}("{{.Key}}", {{.PointerModifier}}{{.Accessor}}) }{{else}} enc.SQLNull{{.NullType}}Key{{.OmitEmpty}}("{{.Key}}", {{.PointerModifier}}{{.Accessor}}){{end}}`, decodeUnknown: ` case "{{.Key}}": - //TODO - //dec.Any({{.Accessor}}) - return nil -`, - encodeUnknown: ` - //TODO - //enc.Any({{.Accessor}}) - + return dec.Any({{.PointerModifier}}{{.Accessor}}) `, + encodeUnknown: `{{if .IsPointer}} if {{.Accessor}} != nil { + enc.Any({{.Accessor}}) + }{{else}}enc.Any({{.Accessor}}){{end}}`, resetFieldValue: `{{if .ResetDependency}}{{.ResetDependency}} {{end}} {{.Mutator}} = {{.Reset}}`, poolInstanceRelease: ` {{.PoolName}}.Put({{.Accessor}})`,