Example #1
0
        private ICode CreateSpecificEntityIdBody(EntityIdDescriptor entity)
        {
            var sourceText = new StringBuilder();

            sourceText.AppendLine($"return new {TypeNames.EntityId}(");
            sourceText.AppendLine("    type,");

            if (entity.Fields.Count == 1)
            {
                var field = entity.Fields[0];

                sourceText.AppendLine(
                    $"    obj.GetProperty(\"{field.Name}\").{GetSerializerMethod(field)}()!);");

                return(CodeBlockBuilder.From(sourceText));
            }

            sourceText.Append("    (");

            var next = false;

            foreach (var field in entity.Fields)
            {
                if (next)
                {
                    sourceText.AppendLine(",");
                    sourceText.Append("    ");
                }

                next = true;

                sourceText.Append(
                    $"obj.GetProperty(\"{field.Name}\").{GetSerializerMethod(field)}()!");
            }

            sourceText.AppendLine("));");

            return(CodeBlockBuilder.From(sourceText));
        }
        private ICode CreateSpecificEntityIdBody(EntityIdDescriptor entity)
        {
            ICode value;
            if (entity.Fields.Count == 1)
            {
                value = CreateEntityIdProperty(entity.Fields[0]);
            }
            else
            {
                value = TupleBuilder
                    .New()
                    .AddMemberRange(entity.Fields.Select(CreateEntityIdProperty));
            }

            return MethodCallBuilder
                .New()
                .SetReturn()
                .SetNew()
                .SetMethodName(TypeNames.EntityId)
                .AddArgument(_type)
                .AddArgument(value);
        }
Example #3
0
        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);
        }
Example #4
0
 private static string GetSerializerMethod(EntityIdDescriptor field) =>
 $"Get{field.TypeName.Split('.').Last()}";
 private static ICode CreateEntityIdProperty(EntityIdDescriptor field) =>
     MethodCallBuilder
         .Inline()
         .SetMethodName(_obj, nameof(JsonElement.GetProperty))
         .AddArgument(field.Name.AsStringToken())
         .Chain(x => x.SetMethodName(GetSerializerMethod(field)).SetNullForgiving());