public ClassBuilder AddProperty(PropertyBuilder property) { _properties.Add(property); return(this); }
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); }
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)); }