gojay

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

commit 6901b37194aa6d1314f8713e82ddf4e2a48dd40a
parent eb6e5994c712d1e934f6bdd99188ac48317ef3c5
Author: Francois Parquet <francois.parquet@gmail.com>
Date:   Wed, 27 Mar 2019 23:02:13 +0800

Merge pull request #106 from francoispqt/update/generator-field-unknown

Update/generator field unknown
Diffstat:
Mgojay/codegen/struct.go | 7++++---
Mgojay/codegen/template.go | 12++++--------
2 files changed, 8 insertions(+), 11 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 { @@ -275,12 +276,12 @@ func (s *Struct) generateFieldEncoding(fields []*toolbox.FieldInfo) ([]string, e templateKey = encodeStructSlice break main } else if field.IsSlice { - s.typedFieldDecode(field, field.ComponentType) templateKey = encodeStructSlice } 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}})`,