private static string GetWriteMethod(ScalarEntityIdDescriptor field) { return(JsonUtils.GetWriteMethod(field.SerializationType)); }
private ICode FormatSpecificEntityIdBody(EntityIdDescriptor entity) { var body = CodeBlockBuilder .New(); body.AddAssigment($"using var {_writer}") .SetRighthandSide( MethodCallBuilder .Inline() .SetNew() .SetMethodName(TypeNames.ArrayWriter)); body.AddAssigment($"using var {_jsonWriter}") .SetRighthandSide( MethodCallBuilder .Inline() .SetNew() .SetMethodName(TypeNames.Utf8JsonWriter) .AddArgument(_writer) .AddArgument(_options)); body.AddMethodCall() .SetMethodName(_jsonWriter, nameof(Utf8JsonWriter.WriteStartObject)); body.AddEmptyLine(); body.AddMethodCall() .SetMethodName(_jsonWriter, nameof(Utf8JsonWriter.WriteString)) .AddArgument(WellKnownNames.TypeName.AsStringToken()) .AddArgument($"{_entityId}.Name"); body.AddEmptyLine(); if (entity.Fields.Count == 1) { ScalarEntityIdDescriptor?field = entity.Fields[0]; body.AddMethodCall() .SetMethodName(_jsonWriter, GetWriteMethod(field)) .AddArgument(field.Name.AsStringToken()) .AddArgument($"({field.SerializationType}){_entityId}.Value"); } else { body.AddAssigment($"var {_entityIdValues}") .SetRighthandSide(CodeBlockBuilder .New() .AddCode("(") .AddCode(TupleBuilder .New() .AddMemberRange( entity.Fields.Select(x => x.SerializationType.ToString()))) .AddCode($"){_entityId}.Value")); body.AddEmptyLine(); for (var index = 0; index < entity.Fields.Count; index++) { ScalarEntityIdDescriptor field = entity.Fields[index]; body.AddMethodCall() .SetMethodName(_jsonWriter, GetWriteMethod(field)) .AddArgument(field.Name.AsStringToken()) .AddArgument($"{_entityIdValues}.Item{index + 1}"); body.AddEmptyLine(); } } body.AddMethodCall() .SetMethodName(_jsonWriter, nameof(Utf8JsonWriter.WriteEndObject)); body.AddMethodCall() .SetMethodName(_jsonWriter, nameof(Utf8JsonWriter.Flush)); body.AddEmptyLine(); body.AddMethodCall() .SetReturn() .SetMethodName(TypeNames.EncodingUtf8, nameof(Encoding.UTF8.GetString)) .AddArgument(MethodCallBuilder.Inline().SetMethodName(_writer, "GetInternalBuffer")) .AddArgument("0") .AddArgument($"{_writer}.Length"); return(body); }
private static ICode ParseEntityIdProperty(ScalarEntityIdDescriptor field) => MethodCallBuilder .Inline() .SetMethodName(_obj, nameof(JsonElement.GetProperty)) .AddArgument(field.Name.AsStringToken()) .Chain(x => x.SetMethodName(GetSerializerMethod(field)).SetNullForgiving());