commit 8bd276680d3dc40bd24772a5eda0a0a5b9438388
parent e46791d21b5e950e35a725e34cbee72354cc7d10
Author: Jack Tang <jack.tang@lalamove.com>
Date: Thu, 23 May 2019 22:23:37 +0800
deterministic generation
Diffstat:
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