private async Task WriteDeserializeLeafListAsync( CodeWriter writer, ITypeLookup typeLookup, string methodName, IType type, string schemaTypeName, string serializerMethod) { IType elementType = type.ElementType(); string clrTypeName = typeLookup.GetLeafClrTypeName(type); string clrElementTypeName = typeLookup.GetLeafClrTypeName(elementType); await WriteDeserializerMethodAsync( writer, methodName, clrTypeName, async() => { await WriteNullHandlingAsync( writer, "obj", "list", type.IsNonNullType()) .ConfigureAwait(false); await WriteDeserializeListAsync( writer, "list", "i", "element", clrElementTypeName, elementType.IsNonNullType(), () => WriteAddElementAsync( writer, clrElementTypeName, schemaTypeName, "list", "i", "element", serializerMethod)) .ConfigureAwait(false); }).ConfigureAwait(false); ; }
private async Task WriteDeserializeMethodAsync( CodeWriter writer, IResultParserTypeDescriptor possibleType, ITypeLookup typeLookup, ISet <string> generatedMethods) { bool first = true; foreach (IType type in possibleType.ResultDescriptor.Fields .Where(t => t.Type.NamedType().IsLeafType()) .Select(t => t.Type)) { string methodName = SerializerNameUtils.CreateDeserializerName(type); if (generatedMethods.Add(methodName)) { Type serializationType = typeLookup.GetSerializationType(type); string serializerMethod = _jsonMethod[serializationType]; if (!first) { await writer.WriteLineAsync().ConfigureAwait(false); } first = false; if (type.IsListType() && type.ListType().ElementType.IsListType()) { // TODO : implement this throw new NotImplementedException(); } else if (type.IsListType() && type.ListType().ElementType.IsLeafType()) { await WriteDeserializeLeafListAsync( writer, typeLookup, methodName, type, type.NamedType().Name, serializerMethod) .ConfigureAwait(false); } else { await WriteDeserializeLeafAsync( writer, methodName, typeLookup.GetLeafClrTypeName(type), type.NamedType().Name, serializerMethod, type.IsNonNullType()) .ConfigureAwait(false); } } } }