refactor: move utility functions to dedicated util package and adjust references
This commit is contained in:
@@ -198,7 +198,7 @@ func FixPointerReceivers(e ast.Expr) (td ast.Expr, ret ast.Expr) {
|
||||
func (g *Generator) GenerateTypes(prefix string, types Types) (err error) {
|
||||
g.CurrentlyGeneratingTypes = types
|
||||
g.CurrentlyGeneratingTypesPrefix = prefix
|
||||
for _, k := range OrderedKeys(types.Types) {
|
||||
for _, k := range util.OrderedKeys(types.Types) {
|
||||
v := types.Types[k]
|
||||
g.Depth = 0
|
||||
e, err2 := g.VisitType(v)
|
||||
@@ -267,11 +267,11 @@ func (g *Generator) GenerateProtocol(protocol Protocol, version string) (err err
|
||||
}
|
||||
|
||||
// Move common packet to their own areas to make packets more identifiable
|
||||
for _, k := range OrderedKeys(protocol.Types.Types) {
|
||||
for _, k := range util.OrderedKeys(protocol.Types.Types) {
|
||||
v := protocol.Types.Types[k]
|
||||
if strings.Contains(k, "packet") {
|
||||
delete(protocol.Types.Types, k)
|
||||
for _, prefix := range OrderedKeys(prefixTypeMap) {
|
||||
for _, prefix := range util.OrderedKeys(prefixTypeMap) {
|
||||
types := prefixTypeMap[prefix]
|
||||
if prefix == "" {
|
||||
continue
|
||||
@@ -281,18 +281,18 @@ func (g *Generator) GenerateProtocol(protocol Protocol, version string) (err err
|
||||
}
|
||||
}
|
||||
|
||||
for _, prefix := range OrderedKeys(prefixTypeMap) {
|
||||
for _, prefix := range util.OrderedKeys(prefixTypeMap) {
|
||||
types := prefixTypeMap[prefix]
|
||||
for _, k := range OrderedKeys(types.Types.Types) {
|
||||
for _, k := range util.OrderedKeys(types.Types.Types) {
|
||||
typeData := types.Types.Types[k]
|
||||
if k != "packet" {
|
||||
continue
|
||||
}
|
||||
packetIds := typeData.([]any)[1].([]any)[0].(map[string]any)["type"].([]any)[1].(map[string]any)["mappings"].(map[string]any)
|
||||
packetIdsStrings := AssertAndConvertMapValues[string](packetIds)
|
||||
packetIdsRev := ReverseMap(packetIdsStrings)
|
||||
packetIdsStrings := util.AssertAndConvertMapValues[string](packetIds)
|
||||
packetIdsRev := util.ReverseMap(packetIdsStrings)
|
||||
v := typeData.([]any)[1].([]any)[1].(map[string]any)["type"].([]any)[1].(map[string]any)["fields"].(map[string]any)
|
||||
for _, k2 := range OrderedKeys(v) {
|
||||
for _, k2 := range util.OrderedKeys(v) {
|
||||
v2 := v[k2].(string)
|
||||
typeName := prefix + util.CamelCase(v2)
|
||||
g.packetInfos = append(g.packetInfos, PacketInfo{
|
||||
@@ -309,7 +309,7 @@ func (g *Generator) GenerateProtocol(protocol Protocol, version string) (err err
|
||||
}
|
||||
}
|
||||
|
||||
for _, prefix := range OrderedKeys(prefixTypeMap) {
|
||||
for _, prefix := range util.OrderedKeys(prefixTypeMap) {
|
||||
types := prefixTypeMap[prefix]
|
||||
err = g.GenerateTypes(prefix, types.Types)
|
||||
if err != nil {
|
||||
|
||||
@@ -21,7 +21,7 @@ func (g *Generator) ParseCompareTo(compareTo string) (e ast.Expr, cet CaseExprTy
|
||||
}
|
||||
parts = parts[downPrefixCount:]
|
||||
startingPoint := g.ContainerStack[len(g.ContainerStack)-downPrefixCount-1]
|
||||
e, cet, err = g.VisitCompareTo(parts, startingPoint.VarToSet, CombineNamAndData("container", startingPoint.Data))
|
||||
e, cet, err = g.VisitCompareTo(parts, startingPoint.VarToSet, util.CombineNamAndData("container", startingPoint.Data))
|
||||
// return ParseCompareToLegacy(compareTo, varToSet)
|
||||
return
|
||||
}
|
||||
@@ -46,7 +46,7 @@ func ContainerCompareTo(g *Generator, parts []string, inExpr ast.Expr, dataRaw a
|
||||
return
|
||||
}
|
||||
|
||||
name, parts, ok := PopFront(parts)
|
||||
name, parts, ok := util.PopFront(parts)
|
||||
if !ok {
|
||||
err = errors.New("expected name part")
|
||||
return
|
||||
@@ -70,7 +70,7 @@ func BitfieldCompareTo(_ *Generator, parts []string, inExpr ast.Expr, dataRaw an
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
fieldName, parts, found := PopFront(parts)
|
||||
fieldName, parts, found := util.PopFront(parts)
|
||||
if !found {
|
||||
err = errors.New("expected name part")
|
||||
return
|
||||
@@ -98,7 +98,7 @@ func BitflagsCompareTo(_ *Generator, parts []string, inExpr ast.Expr, dataRaw an
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
name, parts, ok := PopFront(parts)
|
||||
name, parts, ok := util.PopFront(parts)
|
||||
if !ok {
|
||||
err = errors.New("expected name part")
|
||||
return
|
||||
|
||||
@@ -249,7 +249,7 @@ func SwitchDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, fName := range OrderedKeys(data.Fields) {
|
||||
for _, fName := range util.OrderedKeys(data.Fields) {
|
||||
fType := data.Fields[fName]
|
||||
e := MultiTypeFix(fName, &cet)
|
||||
if e == nil {
|
||||
@@ -324,7 +324,7 @@ func MapperDecoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s
|
||||
mName := name + "Map"
|
||||
|
||||
expressions := Exprs()
|
||||
for _, k := range OrderedKeys(data.Mappings) {
|
||||
for _, k := range util.OrderedKeys(data.Mappings) {
|
||||
v := data.Mappings[k]
|
||||
expressions = append(expressions, KeyValueExpr(NumLitStr(k), StrLit(v)))
|
||||
}
|
||||
|
||||
@@ -201,7 +201,7 @@ func SwitchEncoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
for _, fName := range OrderedKeys(data.Fields) {
|
||||
for _, fName := range util.OrderedKeys(data.Fields) {
|
||||
fType := data.Fields[fName]
|
||||
e := MultiTypeFix(fName, &cet)
|
||||
if e == nil {
|
||||
@@ -275,7 +275,7 @@ func MapperEncoder(g *Generator, varToSet ast.Expr, dataRaw any, name string) (s
|
||||
mName := name + "ReverseMap"
|
||||
|
||||
exprs := Exprs()
|
||||
for _, k := range OrderedKeys(data.Mappings) {
|
||||
for _, k := range util.OrderedKeys(data.Mappings) {
|
||||
v := data.Mappings[k]
|
||||
exprs = append(exprs, KeyValueExpr(StrLit(v), NumLitStr(k)))
|
||||
}
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"cmp"
|
||||
"maps"
|
||||
"slices"
|
||||
)
|
||||
|
||||
func OrderedKeys[Map map[K]V, K cmp.Ordered, V any](m Map) []K {
|
||||
keysIter := maps.Keys(m)
|
||||
keys := slices.Collect(keysIter)
|
||||
slices.Sort(keys)
|
||||
return keys
|
||||
}
|
||||
|
||||
func AssertAndConvertMapValues[T any, M map[K]any, K cmp.Ordered](m M) map[K]T {
|
||||
ret := map[K]T{}
|
||||
for k, v := range m {
|
||||
ret[k] = v.(T)
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func ReverseMap[M map[K]V, K cmp.Ordered, V cmp.Ordered](m M) map[V]K {
|
||||
ret := map[V]K{}
|
||||
for k, v := range m {
|
||||
ret[v] = k
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func PopFront[T any](s []T) (T, []T, bool) {
|
||||
if len(s) == 0 {
|
||||
var zero T
|
||||
return zero, s, false
|
||||
}
|
||||
return s[0], s[1:], true
|
||||
}
|
||||
|
||||
func CombineNamAndData(name string, data any) []any {
|
||||
return []any{name, data}
|
||||
}
|
||||
Reference in New Issue
Block a user