public static Text GenTypeDeserializer(TgType type) => type.Match( primitive: x => Concat("Read", x.Type.ToString()), typeRef: x => Concat("T.", x.Name, ".Deserialize"), vector: x => Concat( "ReadVector(", GenTypeDeserializer(x.Type), ")" ) );
public static string ConvertType(TgType type) => type.Match( primitive: x => { switch (x.Type) { case PrimitiveType.Bytes: return("Bytes"); case PrimitiveType.Int128: return("BigMath.Int128"); case PrimitiveType.Int256: return("BigMath.Int256"); default: return(x.Type.ToString().ToLower()); } }, vector: x => $"Arr<{ConvertType(x.Type)}>", typeRef: x => x.Name == "X" || x.Name == "!X" ? "TFunc" : $"T.{x.Name}" );
public static bool IsRefType(TgType type) => type.Match( primitive: x => x.Type == PrimitiveType.String, vector: _ => false, typeRef: _ => true );