private List <string> GenerateReadMethod(Type type) { var code = new List <string>(); var ReturnClassName = type.CompilableClassName(); code.Add($"public static {ReturnClassName} Read(Serializer serializer)"); code.Add("{"); code.Add("var packer = serializer.Packer;"); code.Add($"return new {ReturnClassName}"); code.Add("{"); foreach (var p in PropertyFieldInfo.FindProperties(type)) { code.Add(GeneratePropertyRead(p)); } code.Add("};"); code.Add("}"); code.Add($"public static async Task<{ReturnClassName}> ReadAsync(Serializer serializer,"); code.Add("CancellationToken cancellation)"); code.Add("{"); code.Add("var packer = serializer.Packer;"); code.Add($"return new {ReturnClassName}"); code.Add("{"); foreach (var p in PropertyFieldInfo.FindProperties(type)) { code.Add(GeneratePropertyAsyncRead(p)); } code.Add("};"); code.Add("}"); return(code); }
private List <string> GenerateWriteMethod(Type type) { var code = new List <string>(); code.Add($"public static void Write({type.CompilableClassName()} value,"); code.Add("Serializer2 serializer, Dictionary<Object,int> cache)"); code.Add("{"); code.Add("var packer = serializer.Packer;"); code.Add($"if (value == null)"); code.Add("{ packer.WriteInt32(0); return; }"); code.Add("{"); code.Add("if (cache.TryGetValue(value, out int id)) {"); code.Add("packer.WriteInt32(id);"); code.Add("return;"); code.Add("}}"); code.Add("{"); code.Add("var id = cache.Count + 1;"); code.Add("cache[value] = id;"); code.Add("packer.WriteInt32(id);"); code.Add("}"); foreach (var p in PropertyFieldInfo.FindProperties(type)) { code.Add("{"); code.AddRange(GeneratePropertyWrite(p)); code.Add("}"); } code.Add("}"); code.Add($"public static async Task WriteAsync({type.CompilableClassName()} value,"); code.Add("Serializer2 serializer, Dictionary<Object,int> cache, CancellationToken cancellation)"); code.Add("{"); code.Add("var packer = serializer.Packer;"); code.Add($"if (value == null)"); code.Add("{ await packer.WriteInt32Async(0, cancellation); return; }"); code.Add("{"); code.Add("if (cache.TryGetValue(value, out int id)) {"); code.Add("await packer.WriteInt32Async(id, cancellation);"); code.Add("return;"); code.Add("}}"); code.Add("{"); code.Add("var id = cache.Count + 1;"); code.Add("cache[value] = id;"); code.Add("await packer.WriteInt32Async(id, cancellation);"); code.Add("}"); foreach (var p in PropertyFieldInfo.FindProperties(type)) { code.Add("{"); code.AddRange(GeneratePropertyAsyncWrite(p)); code.Add("}"); } code.Add("}"); return(code); }
private List <string> GenerateReadMethod(Type type) { var code = new List <string>(); var ReturnClassName = type.CompilableClassName(); code.Add($"public static {ReturnClassName} Read(Serializer2 serializer, Dictionary<int, Object> cache)"); code.Add("{"); code.Add("var packer = serializer.Packer;"); code.Add("var refId = packer.ReadInt32();"); code.Add("if (refId == 0 ) return null;"); code.Add($"if (cache.TryGetValue(refId, out object ret)) return ({ReturnClassName})ret;"); code.Add($"var result = new {ReturnClassName}();"); code.Add("cache[refId] = result;"); foreach (var p in PropertyFieldInfo.FindProperties(type)) { code.Add("{"); code.AddRange(GeneratePropertyRead(p)); code.Add("};"); } code.Add("return result;"); code.Add("}"); code.Add($"public static async Task<{ReturnClassName}> ReadAsync(Serializer2 serializer,"); code.Add("Dictionary<int, Object> cache, CancellationToken cancellation)"); code.Add("{"); code.Add("var packer = serializer.Packer;"); code.Add("var refId = await packer.ReadInt32Async(cancellation);"); code.Add("if (refId == 0 ) return null;"); code.Add($"if (cache.TryGetValue(refId, out object ret)) return ({ReturnClassName})ret;"); code.Add($"var result = new {ReturnClassName}();"); code.Add("cache[refId] = result;"); foreach (var p in PropertyFieldInfo.FindProperties(type)) { code.Add("{"); code.AddRange(GeneratePropertyAsyncRead(p)); code.Add("};"); } code.Add("return result;"); code.Add("}"); return(code); }
private List <string> GenerateWriteMethod(Type type) { var code = new List <string>(); code.Add($"public static void Write({type.CompilableClassName()} value, Serializer serializer)"); code.Add("{"); code.Add("var packer = serializer.Packer;"); foreach (var p in PropertyFieldInfo.FindProperties(type)) { code.AddRange(GeneratePropertyWrite(p)); } code.Add("}"); code.Add($"public static async Task WriteAsync({type.CompilableClassName()} value,"); code.Add("Serializer serializer, CancellationToken cancellation)"); code.Add("{"); code.Add("var packer = serializer.Packer;"); foreach (var p in PropertyFieldInfo.FindProperties(type)) { code.AddRange(GeneratePropertyAsyncWrite(p)); } code.Add("}"); return(code); }