Esempio n. 1
0
        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);
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
        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();
        }
Esempio n. 9
0
        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);
        }