private void AppendDeserializeLeaf(
            StringBuilder body,
            ResultParserDeserializerMethodDescriptor methodDescriptor,
            ResultTypeComponentDescriptor type,
            string indent)
        {
            AppendNullHandling(
                body,
                "obj",
                "value",
                IsNullable(type),
                indent,
                string.Empty);

            body.AppendLine();
            body.AppendLine();

            body.Append($"return ");

            AppendDeserializeLeafValue(
                body,
                methodDescriptor.Serializer.FieldName,
                "value",
                methodDescriptor.SerializationType,
                methodDescriptor.RuntimeType,
                IsNullable(type));

            body.Append(";");
        }
 private bool IsNullable(ResultTypeComponentDescriptor typeComponent)
 {
     if (typeComponent.IsNullable)
     {
         if (typeComponent.IsReferenceType)
         {
             return(NullableRefTypes);
         }
         return(true);
     }
     return(false);
 }
        private void AppendDeserializeLeafList(
            StringBuilder body,
            ResultParserDeserializerMethodDescriptor methodDescriptor,
            ResultTypeComponentDescriptor type,
            ImmutableQueue <ResultTypeComponentDescriptor> runtimeTypeComponents,
            string indent)
        {
            AppendNullHandling(
                body,
                "obj",
                "value",
                IsNullable(type),
                indent,
                string.Empty);

            body.AppendLine();
            body.AppendLine();

            AppendList(
                body,
                new ListInfo(
                    "value",
                    "i",
                    "count",
                    "element",
                    "result",
                    type.Name),
                IsNullable(runtimeTypeComponents.Peek()),
                initialIndent => AppendSetLeafElement(
                    body,
                    "result",
                    "i",
                    methodDescriptor.Serializer.FieldName,
                    "element",
                    methodDescriptor.SerializationType,
                    runtimeTypeComponents.Peek().Name,
                    IsNullable(runtimeTypeComponents.Peek()),
                    initialIndent),
                indent, string.Empty);

            body.AppendLine();
            body.AppendLine();
            body.AppendLine("return result;");
        }