gojay

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

commit 8bd276680d3dc40bd24772a5eda0a0a5b9438388
parent e46791d21b5e950e35a725e34cbee72354cc7d10
Author: Jack Tang <jack.tang@lalamove.com>
Date:   Thu, 23 May 2019 22:23:37 +0800

deterministic generation

Diffstat:
Mgojay/codegen/generator.go | 14+++++++++-----
Mgojay/codegen/helper.go | 13+++++++++++++
2 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/gojay/codegen/generator.go b/gojay/codegen/generator.go @@ -7,7 +7,6 @@ import ( "os" "path/filepath" "strings" - "github.com/viant/toolbox" ) @@ -89,19 +88,24 @@ func (g *Generator) Generate() error { func (g *Generator) writeCode() error { var generatedCode = []string{} - for _, code := range g.pooledObjects { + + for _, key := range sortedKeys(g.pooledObjects) { + code := g.pooledObjects[key] generatedCode = append(generatedCode, code) } generatedCode = append(generatedCode, "") - for _, code := range g.sliceTypes { + for _, key := range sortedKeys(g.sliceTypes) { + code := g.sliceTypes[key] generatedCode = append(generatedCode, code) } generatedCode = append(generatedCode, "") - for _, code := range g.structTypes { + for _, key := range sortedKeys(g.structTypes) { + code := g.structTypes[key] generatedCode = append(generatedCode, code) } - for _, code := range g.poolInit { + for _, key := range sortedKeys(g.poolInit) { + code := g.poolInit[key] if g.Init != "" { g.Init += "\n" } diff --git a/gojay/codegen/helper.go b/gojay/codegen/helper.go @@ -4,6 +4,7 @@ import ( "github.com/viant/toolbox" "reflect" "strings" + "sort" ) func firstLetterToUppercase(text string) string { @@ -87,3 +88,14 @@ func getJSONKey(options *Options, field *toolbox.FieldInfo) string { func normalizeTypeName(typeName string) string { return strings.Replace(typeName, "*", "", strings.Count(typeName, "*")) } + +func sortedKeys(m map[string]string) ([]string) { + keys := make([]string, len(m)) + i := 0 + for k := range m { + keys[i] = k + i++ + } + sort.Strings(keys) + return keys +} +\ No newline at end of file