github.com/mavryk-network/mvgo@v1.19.9/internal/parse/fixup.go (about) 1 package parse 2 3 import "github.com/mavryk-network/mvgo/contract/ast" 4 5 type FixupConfig map[string]FixupStruct 6 7 type FixupStruct struct { 8 Name string 9 Equals string 10 Fields map[string]string 11 } 12 13 func Fixup(cfg FixupConfig, structs []*ast.Struct, processNameFunc func(string) string) []*ast.Struct { 14 structsByOldName := make(map[string]*ast.Struct) 15 for _, s := range structs { 16 structsByOldName[processNameFunc(s.Name)] = s 17 } 18 for name, v := range cfg { 19 currentStruct := structsByOldName[name] 20 if v.Name != "" { 21 currentStruct.Name = v.Name 22 } 23 for oldF, newF := range v.Fields { 24 for i, f := range currentStruct.Fields { 25 if processNameFunc(f.Name) == oldF { 26 currentStruct.Fields[i].Name = newF 27 } 28 } 29 } 30 } 31 for name, v := range cfg { 32 old := structsByOldName[name] 33 if v.Equals != "" { 34 *old = *structsByOldName[v.Equals] 35 structs = deleteStruct(structs, old) 36 } 37 } 38 return structs 39 } 40 41 func deleteStruct(structs []*ast.Struct, str *ast.Struct) []*ast.Struct { 42 for i, s := range structs { 43 if s == str { 44 newSlice := make([]*ast.Struct, 0, len(structs)-1) 45 newSlice = append(newSlice, structs[:i]...) 46 return append(newSlice, structs[i+1:]...) 47 } 48 } 49 return structs 50 }