コード例 #1
0
 public ClassBuilder AddProperty(PropertyBuilder property)
 {
     _properties.Add(property);
     return(this);
 }
コード例 #2
0
        protected override void Generate(
            CodeWriter writer,
            OperationDescriptor descriptor,
            out string fileName)
        {
            var(classBuilder, constructorBuilder) = CreateClassBuilder();

            fileName = DocumentTypeNameFromOperationName(descriptor.Name);
            classBuilder
            .AddImplements(TypeNames.IDocument)
            .SetName(fileName);
            constructorBuilder.SetAccessModifier(AccessModifier.Private);

            classBuilder.AddField(
                FieldBuilder.New()
                .SetStatic()
                .SetConst()
                .SetType(TypeNames.String)
                .SetName("_bodyString")
                .SetValue($"@\"{descriptor.BodyString}\"", true));

            classBuilder.AddField(
                FieldBuilder.New()
                .SetStatic()
                .SetReadOnly()
                .SetType("byte[]")
                .SetName("_body")
                .SetValue($"{TypeNames.EncodingUtf8}.GetBytes(_bodyString)"));

            string operationKind;

            switch (descriptor)
            {
            case MutationOperationDescriptor mutationOperationDescriptor:
                operationKind = "Mutation";
                break;

            case QueryOperationDescriptor queryOperationDescriptor:
                operationKind = "Query";
                break;

            case SubscriptionOperationDescriptor subscriptionOperationDescriptor:
                operationKind = "Subscription";
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(descriptor));
            }

            classBuilder.AddProperty(
                PropertyBuilder.New()
                .SetStatic()
                .SetType(fileName)
                .SetName("Instance")
                .SetValue($"new {fileName}()"));

            classBuilder.AddProperty(
                PropertyBuilder.New()
                .SetType(TypeNames.OperationKind)
                .SetName("Kind").AsLambda($"{TypeNames.OperationKind}.{operationKind}"));

            classBuilder.AddProperty(
                PropertyBuilder.New()
                .SetType($"{TypeNames.IReadOnlySpan}<byte>")
                .SetName("Body").AsLambda("_body"));

            classBuilder.AddMethod(
                MethodBuilder.New()
                .SetAccessModifier(AccessModifier.Public)
                .SetReturnType("override string")
                .SetName("ToString")
                .AddCode("return _bodyString;"));

            CodeFileBuilder
            .New()
            .SetNamespace(descriptor.Namespace)
            .AddType(classBuilder)
            .Build(writer);
        }
コード例 #3
0
        protected override Task WriteAsync(
            CodeWriter writer,
            EnumValueSerializerDescriptor descriptor)
        {
            if (writer is null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            if (descriptor is null)
            {
                throw new ArgumentNullException(nameof(descriptor));
            }

            ClassBuilder classBuilder = ClassBuilder.New()
                                        .SetAccessModifier(AccessModifier.Public)
                                        .SetSealed()
                                        .SetName(descriptor.Name)
                                        .AddImplements(Types.IValueSerializer)
                                        .AddProperty(PropertyBuilder.New()
                                                     .SetAccessModifier(AccessModifier.Public)
                                                     .SetType("string")
                                                     .SetName("Name")
                                                     .SetGetter(CodeLineBuilder.New()
                                                                .SetLine($"return \"{descriptor.EnumGraphQLTypeName}\";")))
                                        .AddProperty(PropertyBuilder.New()
                                                     .SetAccessModifier(AccessModifier.Public)
                                                     .SetType(Types.ValueKind)
                                                     .SetName("Kind")
                                                     .SetGetter(CodeLineBuilder.New()
                                                                .SetLine($"return {Types.ValueKind}.Enum;")))
                                        .AddProperty(PropertyBuilder.New()
                                                     .SetAccessModifier(AccessModifier.Public)
                                                     .SetType(Types.Type)
                                                     .SetName("ClrType")
                                                     .SetGetter(CodeLineBuilder.New()
                                                                .SetLine($"return typeof({descriptor.EnumTypeName});")))
                                        .AddProperty(PropertyBuilder.New()
                                                     .SetAccessModifier(AccessModifier.Public)
                                                     .SetType(Types.Type)
                                                     .SetName("SerializationType")
                                                     .SetGetter(CodeLineBuilder.New()
                                                                .SetLine($"return typeof(string);")))
                                        .AddMethod(MethodBuilder.New()
                                                   .SetAccessModifier(AccessModifier.Public)
                                                   .SetReturnType("object?", NullableRefTypes)
                                                   .SetReturnType("object", !NullableRefTypes)
                                                   .SetName("Serialize")
                                                   .AddParameter(ParameterBuilder.New()
                                                                 .SetType("object?", NullableRefTypes)
                                                                 .SetType("object", !NullableRefTypes)
                                                                 .SetName("value"))
                                                   .AddCode(CreateSerializerMethodBody(descriptor, CodeWriter.Indent)))
                                        .AddMethod(MethodBuilder.New()
                                                   .SetAccessModifier(AccessModifier.Public)
                                                   .SetReturnType("object?", NullableRefTypes)
                                                   .SetReturnType("object", !NullableRefTypes)
                                                   .SetName("Deserialize")
                                                   .AddParameter(ParameterBuilder.New()
                                                                 .SetType("object?", NullableRefTypes)
                                                                 .SetType("object", !NullableRefTypes)
                                                                 .SetName("serialized"))
                                                   .AddCode(CreateDeserializerMethodBody(descriptor, CodeWriter.Indent)));

            return(CodeFileBuilder.New()
                   .SetNamespace(descriptor.Namespace)
                   .AddType(classBuilder)
                   .BuildAsync(writer));
        }