private void AddScalarTypeDeserializerMethod( MethodBuilder methodBuilder, ILeafTypeDescriptor namedType) { string deserializeMethod = namedType.SerializationType.ToString() switch { TypeNames.String => nameof(JsonElement.GetString), TypeNames.Uri => nameof(JsonElement.GetString), TypeNames.Byte => nameof(JsonElement.GetByte), TypeNames.ByteArray => nameof(JsonElement.GetBytesFromBase64), TypeNames.Int16 => nameof(JsonElement.GetInt16), TypeNames.Int32 => nameof(JsonElement.GetInt32), TypeNames.Int64 => nameof(JsonElement.GetInt64), TypeNames.UInt16 => nameof(JsonElement.GetUInt16), TypeNames.UInt32 => nameof(JsonElement.GetUInt32), TypeNames.UInt64 => nameof(JsonElement.GetUInt64), TypeNames.Single => nameof(JsonElement.GetSingle), TypeNames.Double => nameof(JsonElement.GetDouble), TypeNames.Decimal => nameof(JsonElement.GetDecimal), TypeNames.DateTimeOffset => nameof(JsonElement.GetString), TypeNames.DateTime => nameof(JsonElement.GetString), TypeNames.TimeSpan => nameof(JsonElement.GetString), TypeNames.Boolean => nameof(JsonElement.GetBoolean), TypeNames.Guid => nameof(JsonElement.GetGuid), _ => throw new NotSupportedException("Serialization format not supported.") }; methodBuilder.AddCode( $"return {GetFieldName(namedType.Name)}Parser.Parse({_objParamName}.Value" + $".{deserializeMethod}()!);"); } }
public static TypeReferenceBuilder ToTypeReference( this ITypeDescriptor typeReferenceDescriptor, TypeReferenceBuilder?builder = null) { TypeReferenceBuilder actualBuilder = builder ?? TypeReferenceBuilder.New(); if (typeReferenceDescriptor is NonNullTypeDescriptor n) { typeReferenceDescriptor = n.InnerType; } else { actualBuilder.SetIsNullable(true); } return(typeReferenceDescriptor switch { ListTypeDescriptor list => ToTypeReference(list.InnerType, actualBuilder.SetListType()), EnumTypeDescriptor @enum => actualBuilder.SetName(@enum.RuntimeType.ToString()), ILeafTypeDescriptor leaf => actualBuilder.SetName(leaf.RuntimeType.ToString()), INamedTypeDescriptor named => actualBuilder.SetName(named.RuntimeType.ToString()), _ => throw new ArgumentOutOfRangeException(nameof(typeReferenceDescriptor)) });
private static string BuildMapMethodName( ITypeDescriptor typeDescriptor, bool parentIsList = false) { return(typeDescriptor switch { ListTypeDescriptor listTypeDescriptor => BuildMapMethodName(listTypeDescriptor.InnerType, true) + "Array", ILeafTypeDescriptor leafTypeDescriptor => GetPropertyName(leafTypeDescriptor.Name), InterfaceTypeDescriptor { ImplementedBy : { Count : > 1 },
private void AddScalarTypeDeserializerMethod( MethodBuilder methodBuilder, ILeafTypeDescriptor namedType) { string deserializeMethod = JsonUtils.GetParseMethod(namedType.SerializationType); methodBuilder.AddCode( MethodCallBuilder .New() .SetReturn() .SetMethodName(GetFieldName(namedType.Name) + "Parser", "Parse") .AddArgument(MethodCallBuilder .Inline() .SetMethodName(_obj, nameof(Nullable <JsonElement> .Value), deserializeMethod) .SetNullForgiving())); }
private void AddScalarTypeDeserializerMethod( MethodBuilder methodBuilder, ILeafTypeDescriptor namedType) { string deserializeMethod = namedType.SerializationType.ToString() switch { TypeNames.String => nameof(JsonElement.GetString), TypeNames.Uri => nameof(JsonElement.GetString), TypeNames.Byte => nameof(JsonElement.GetByte), TypeNames.ByteArray => nameof(JsonElement.GetBytesFromBase64), TypeNames.Int16 => nameof(JsonElement.GetInt16), TypeNames.Int32 => nameof(JsonElement.GetInt32), TypeNames.Int64 => nameof(JsonElement.GetInt64), TypeNames.UInt16 => nameof(JsonElement.GetUInt16), TypeNames.UInt32 => nameof(JsonElement.GetUInt32), TypeNames.UInt64 => nameof(JsonElement.GetUInt64), TypeNames.Single => nameof(JsonElement.GetSingle), TypeNames.Double => nameof(JsonElement.GetDouble), TypeNames.Decimal => nameof(JsonElement.GetDecimal), TypeNames.DateTimeOffset => nameof(JsonElement.GetString), TypeNames.DateTime => nameof(JsonElement.GetString), TypeNames.TimeSpan => nameof(JsonElement.GetString), TypeNames.Boolean => nameof(JsonElement.GetBoolean), TypeNames.Guid => nameof(JsonElement.GetGuid), _ => throw new NotSupportedException("Serialization format not supported.") }; methodBuilder.AddCode( MethodCallBuilder .New() .SetReturn() .SetMethodName( GetFieldName(namedType.Name) + "Parser", nameof(ILeafValueParser <object, object> .Parse)) .AddArgument(MethodCallBuilder .Inline() .SetMethodName(_obj, nameof(Nullable <JsonElement> .Value), deserializeMethod) .SetNullForgiving())); } }
private void AddScalarTypeDeserializerMethod( MethodBuilder methodBuilder, ILeafTypeDescriptor namedType) { MethodCallBuilder methodCall = MethodCallBuilder .New() .SetReturn() .SetMethodName(GetFieldName(namedType.Name) + "Parser", "Parse"); if (namedType.SerializationType.ToString() == TypeNames.JsonElement) { methodCall.AddArgument($"{_obj}.{nameof(Nullable<JsonElement>.Value)}!"); } else { var deserializeMethod = JsonUtils.GetParseMethod(namedType.SerializationType); methodCall.AddArgument(MethodCallBuilder .Inline() .SetMethodName(_obj, nameof(Nullable <JsonElement> .Value), deserializeMethod) .SetNullForgiving()); } methodBuilder.AddCode(methodCall); }