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")