From 8bd276680d3dc40bd24772a5eda0a0a5b9438388 Mon Sep 17 00:00:00 2001 From: Jack Tang Date: Thu, 23 May 2019 22:23:37 +0800 Subject: [PATCH] deterministic generation --- gojay/codegen/generator.go | 14 +++++++++----- gojay/codegen/helper.go | 12 ++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/gojay/codegen/generator.go b/gojay/codegen/generator.go index 99fe9d4..dd43ae5 100644 --- 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 index 0609ad5..90e77d0 100644 --- 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