feat(go): complete 100% transpilation of all catalogs, rpctypes, models, configs, gameplay, and 155 routers to native Go architecture
This commit is contained in:
1 parent
6cf3abfafe
commit
e43a310617
1295 files changed
+52846
-149865
No files matched your search
Vendored
+63
@@ -0,0 +1,63 @@
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
# Ensure UTF-8 output
|
||||
sys.stdout.reconfigure(encoding='utf-8')
|
||||
|
||||
TYPE_MAP = {
|
||||
'uint': 'uint32',
|
||||
'int': 'int32',
|
||||
'ulong': 'uint64',
|
||||
'long': 'int64',
|
||||
'ushort': 'uint16',
|
||||
'short': 'int16',
|
||||
'byte': 'uint8',
|
||||
'sbyte': 'int8',
|
||||
'float': 'float32',
|
||||
'double': 'float64',
|
||||
'bool': 'bool',
|
||||
'string': 'string',
|
||||
'object': 'interface{}',
|
||||
'DateTime': 'time.Time',
|
||||
'TimeSpan': 'time.Duration',
|
||||
}
|
||||
|
||||
def map_type(t):
|
||||
t = t.strip()
|
||||
if t.endswith('?'):
|
||||
inner = map_type(t[:-1])
|
||||
return f"*{inner}"
|
||||
if t.startswith('List<') or t.startswith('IList<') or t.startswith('IReadOnlyList<'):
|
||||
inner = t[t.find('<')+1 : t.rfind('>')]
|
||||
return f"[]{map_type(inner)}"
|
||||
if t.startswith('Dictionary<') or t.startswith('IReadOnlyDictionary<'):
|
||||
parts = t[t.find('<')+1 : t.rfind('>')].split(',')
|
||||
if len(parts) == 2:
|
||||
return f"map[{map_type(parts[0])}]{map_type(parts[1])}"
|
||||
if t.startswith('HashSet<') or t.startswith('IReadOnlySet<'):
|
||||
inner = t[t.find('<')+1 : t.rfind('>')]
|
||||
return f"map[{map_type(inner)}]struct{{}}"
|
||||
return TYPE_MAP.get(t, t)
|
||||
|
||||
def convert_record(line):
|
||||
# record struct Name(T1 F1, T2 F2, ...)
|
||||
m = re.search(r'(?:public|internal|private)?\s*(?:readonly)?\s*record\s+(?:struct\s+)?([A-Za-z0-9_]+)\s*\(([^)]*)\)', line)
|
||||
if not m:
|
||||
return None
|
||||
name = m.group(1)
|
||||
params = m.group(2).split(',')
|
||||
fields = []
|
||||
for p in params:
|
||||
p = p.strip()
|
||||
if not p:
|
||||
continue
|
||||
parts = p.split()
|
||||
if len(parts) >= 2:
|
||||
f_type = map_type(parts[0])
|
||||
f_name = parts[1]
|
||||
json_tag = f_name[0].lower() + f_name[1:]
|
||||
fields.append(f"\t{f_name} {f_type} `json:\"{json_tag}\"`")
|
||||
return f"type {name} struct {{\n" + "\n".join(fields) + "\n}"
|
||||
|
||||
print("Converter core initialized")
|
||||
Reference in new issue
Block a user