protected override void Generate( CodeWriter writer, InterfaceTypeDescriptor descriptor, out string fileName) { fileName = descriptor.RuntimeType.Name; InterfaceBuilder interfaceBuilder = InterfaceBuilder.New().SetName(fileName); foreach (var prop in descriptor.Properties) { interfaceBuilder.AddProperty( prop.Name, x => x.SetType(prop.Type.ToBuilder()).SetAccessModifier(AccessModifier.Public)); } foreach (NameString implement in descriptor.Implements) { interfaceBuilder.AddImplements(implement); } CodeFileBuilder .New() .SetNamespace(descriptor.RuntimeType.NamespaceWithoutGlobal) .AddType(interfaceBuilder) .Build(writer); }
protected override void Generate(ClientDescriptor descriptor, CSharpSyntaxGeneratorSettings settings, CodeWriter writer, out string fileName, out string?path, out string ns) { fileName = descriptor.InterfaceType.Name; path = null; ns = descriptor.InterfaceType.NamespaceWithoutGlobal; InterfaceBuilder interfaceBuilder = InterfaceBuilder .New() .SetName(fileName) .SetComment(descriptor.Documentation); foreach (OperationDescriptor operation in descriptor.Operations) { interfaceBuilder .AddProperty(NameUtils.GetPropertyName(operation.Name)) .SetOnlyDeclaration() .SetType(operation.InterfaceType.ToString()); } interfaceBuilder.Build(writer); }
protected override Task WriteAsync( CodeWriter writer, OutputModelInterfaceDescriptor descriptor) { if (writer is null) { throw new ArgumentNullException(nameof(writer)); } if (descriptor is null) { throw new ArgumentNullException(nameof(descriptor)); } InterfaceBuilder builder = InterfaceBuilder.New() .SetAccessModifier(AccessModifier.Public) .SetName(descriptor.Name); foreach (var typeName in descriptor.Implements) { builder.AddImplements(typeName); } foreach (OutputFieldDescriptor field in descriptor.Fields) { builder.AddProperty( InterfacePropertyBuilder.New() .SetName(field.Name) .SetType(field.Type)); } return(builder.BuildAsync(writer)); }
protected override void Generate( CodeWriter writer, InterfaceTypeDescriptor descriptor, out string fileName) { fileName = descriptor.RuntimeType.Name; InterfaceBuilder interfaceBuilder = InterfaceBuilder .New() .SetName(fileName); foreach (var prop in descriptor.Properties) { interfaceBuilder .AddProperty(prop.Name) .SetType(prop.Type.ToBuilder()) .SetPublic(); } interfaceBuilder.AddImplementsRange(descriptor.Implements.Select(x => x.Value)); CodeFileBuilder .New() .SetNamespace(descriptor.RuntimeType.NamespaceWithoutGlobal) .AddType(interfaceBuilder) .Build(writer); }
protected override void Generate(InterfaceTypeDescriptor descriptor, CSharpSyntaxGeneratorSettings settings, CodeWriter writer, out string fileName, out string?path, out string ns) { fileName = descriptor.RuntimeType.Name; path = null; ns = descriptor.RuntimeType.NamespaceWithoutGlobal; InterfaceBuilder interfaceBuilder = InterfaceBuilder .New() .SetComment(descriptor.Description) .SetName(fileName); foreach (var prop in descriptor.Properties) { interfaceBuilder .AddProperty(prop.Name) .SetComment(prop.Description) .SetType(prop.Type.ToTypeReference()) .SetPublic(); } interfaceBuilder.AddImplementsRange(descriptor.Implements.Select(x => x.Value)); interfaceBuilder.Build(writer); }
public void IfAddPropertyIsCalledShouldAddPropertyToDeclaration() { var builder = new InterfaceBuilder(InterfaceName); var target = builder.AddProperty <string>(FirstPropertyName).GetDeclaration(); Assert.AreEqual(1, target.Members.Count); var member = target.Members[0]; Assert.AreEqual(FirstPropertyName, member.Name); }
public static InterfaceBuilder AddProperty( this InterfaceBuilder builder, string name, Action <PropertyBuilder> configure) { PropertyBuilder propertyBuilder = PropertyBuilder.New().SetName(name); configure(propertyBuilder); builder.AddProperty(propertyBuilder); return(builder); }
public void IfAddPropertyIsCalledTwiceWithTheSamePropertyNameShouldThrowException() { var builder = new InterfaceBuilder(InterfaceName); builder.AddProperty <string>(FirstPropertyName).AddProperty <string>(FirstPropertyName).GetDeclaration(); }
protected override void Generate( CodeWriter writer, DataTypeDescriptor descriptor, out string fileName) { // Setup class fileName = descriptor.RuntimeType.Name; AbstractTypeBuilder typeBuilder; ConstructorBuilder? constructorBuilder = null; var typenamePropName = "__typename"; if (descriptor.IsInterface) { typeBuilder = new InterfaceBuilder() .SetName(fileName); typeBuilder.AddProperty(PropertyBuilder.New() .SetName(typenamePropName) .SetType(TypeNames.String)); } else { var(classBuilder, constructorBuilder2) = CreateClassBuilder(); constructorBuilder2 .SetTypeName(fileName) .SetAccessModifier(AccessModifier.Public); constructorBuilder = constructorBuilder2; classBuilder.AddProperty( PropertyBuilder .New() .SetAccessModifier(AccessModifier.Public) .SetName(typenamePropName) .SetType(TypeNames.String)); var paramName = "typename"; var assignment = AssignmentBuilder .New() .SetLefthandSide(typenamePropName) .SetRighthandSide(paramName) .AssertNonNull(); constructorBuilder.AddParameter( ParameterBuilder .New() .SetType(TypeNames.String) .SetName(paramName)) .AddCode(assignment); classBuilder.SetName(fileName); typeBuilder = classBuilder; } // Add Properties to class foreach (PropertyDescriptor item in descriptor.Properties) { var itemParamName = GetParameterName(item.Name); var assignment = AssignmentBuilder .New() .SetLefthandSide(item.Name) .SetRighthandSide(itemParamName); var paramType = item.Type.IsEntityType() ? item.Type.ToEntityIdBuilder() : item.Type.ToBuilder(); constructorBuilder?.AddParameter( ParameterBuilder .New() .SetType(paramType) .SetName(itemParamName) .SetDefault("null")) .AddCode(assignment); switch (item.Type.Kind) { case TypeKind.LeafType: typeBuilder.AddProperty(item.Name) .SetType(item.Type.ToBuilder()) .SetAccessModifier(AccessModifier.Public); break; case TypeKind.DataType: typeBuilder.AddProperty(item.Name) // TODO this looks wrong. We should avoid nameoverride and delete it .SetType(item.Type.ToBuilder(item.Type.Name)) .SetAccessModifier(AccessModifier.Public); break; case TypeKind.EntityType: typeBuilder.AddProperty(item.Name) .SetType(item.Type.ToBuilder().SetName(TypeNames.EntityId)) .SetAccessModifier(AccessModifier.Public); break; default: throw new ArgumentOutOfRangeException(); } } foreach (NameString superType in descriptor.Implements) { typeBuilder.AddImplements(CreateDataTypeName(superType)); } CodeFileBuilder .New() .SetNamespace(descriptor.RuntimeType.NamespaceWithoutGlobal) .AddType(typeBuilder) .Build(writer); }