/// <summary>Initializes a new instance of the <see cref="ClassTemplateModel"/> class.</summary>
        /// <param name="typeName">Name of the type.</param>
        /// <param name="settings">The settings.</param>
        /// <param name="resolver">The resolver.</param>
        /// <param name="schema">The schema.</param>
        /// <param name="rootObject">The root object.</param>
        public ClassTemplateModel(string typeName, CSharpGeneratorSettings settings,
                                  CSharpTypeResolver resolver, JsonSchema schema, object rootObject)
            : base(resolver, schema, rootObject)
        {
            _resolver = resolver;
            _schema   = schema;
            _settings = settings;

            ClassName  = typeName;
            Properties = _schema.ActualProperties.Values
                         .Where(p => !p.IsInheritanceDiscriminator)
                         .Select(property => new PropertyModel(this, property, _resolver, _settings))
                         .ToArray();

            Id = _schema.Id;
            if (schema.InheritedSchema != null)
            {
                BaseClass     = new ClassTemplateModel(BaseClassName, settings, resolver, schema.InheritedSchema, rootObject);
                AllProperties = Properties.Concat(BaseClass.AllProperties).ToArray();
            }
            else
            {
                AllProperties = Properties;
            }
        }
 /// <summary>Initializes a new instance of the <see cref="CSharpControllerGenerator" /> class.</summary>
 /// <param name="document">The Swagger document.</param>
 /// <param name="settings">The settings.</param>
 /// <param name="resolver">The resolver.</param>
 /// <exception cref="ArgumentNullException"><paramref name="document" /> is <see langword="null" />.</exception>
 public CSharpRefitGenerator(OpenApiDocument document, CSharpRefitGeneratorSettings settings,
                             CSharpTypeResolver resolver)
     : base(document, settings, resolver)
 {
     _document = document ?? throw new ArgumentNullException(nameof(document));
     Settings  = settings ?? throw new ArgumentNullException(nameof(settings));
 }
        public void When_schema_has_default_value_of_enum_it_is_generated_in_CSharp_and_TypeScript_correctly()
        {
            //// Arrange
            var csharpSettings = new CSharpGeneratorSettings {
                EnumNameGenerator = new MyEnumNameGenerator(), Namespace = "Ns"
            };
            var csharpGenerator    = new CSharpValueGenerator(csharpSettings);
            var csharpTypeResolver = new CSharpTypeResolver(csharpSettings);

            //// Act
            var schema = new JsonSchema4()
            {
                Type        = JsonObjectType.String,
                Enumeration =
                {
                    "Foo",
                    "Bar"
                },
                Default = "Bar"
            };

            var typescriptSettings = new TypeScriptGeneratorSettings {
                EnumNameGenerator = new MyEnumNameGenerator()
            };
            var typescriptGenerator    = new TypeScriptValueGenerator(typescriptSettings);
            var typescriptTypeResolver = new TypeScriptTypeResolver(typescriptSettings);

            var csharpValue     = csharpGenerator.GetDefaultValue(schema, true, "MyEnum", "MyEnum", true, csharpTypeResolver);
            var typescriptValue = typescriptGenerator.GetDefaultValue(schema, true, "MyEnum", "MyEnum", true, typescriptTypeResolver);

            //// Assert
            Assert.Equal("Ns.MyEnum.bar", csharpValue);
            Assert.Equal("MyEnum.bar", typescriptValue);
        }
 /// <summary>Initializes a new instance of the <see cref="SwaggerToCSharpGeneratorBase"/> class.</summary>
 /// <param name="document">The document.</param>
 /// <param name="settings">The settings.</param>
 /// <param name="resolver">The resolver.</param>
 protected SwaggerToCSharpGeneratorBase(SwaggerDocument document, SwaggerToCSharpGeneratorSettings settings, CSharpTypeResolver resolver)
     : base(document, settings.CodeGeneratorSettings, resolver)
 {
     _document = document;
     _settings = settings;
     _resolver = resolver;
 }
Exemple #5
0
 /// <summary>Initializes a new instance of the <see cref="CSharpGeneratorBase"/> class.</summary>
 /// <param name="document">The document.</param>
 /// <param name="settings">The settings.</param>
 /// <param name="resolver">The resolver.</param>
 protected CSharpGeneratorBase(OpenApiDocument document, CSharpGeneratorBaseSettings settings, CSharpTypeResolver resolver)
     : base(document, settings.CodeGeneratorSettings, resolver)
 {
     _document = document;
     _settings = settings;
     _resolver = resolver;
 }
Exemple #6
0
 /// <summary>Initializes a new instance of the <see cref="PropertyModel"/> class.</summary>
 /// <param name="classTemplateModel">The class template model.</param>
 /// <param name="property">The property.</param>
 /// <param name="resolver">The resolver.</param>
 /// <param name="settings">The settings.</param>
 public PropertyModel(ClassTemplateModel classTemplateModel, JsonProperty property, CSharpTypeResolver resolver, CSharpGeneratorSettings settings)
     : base(property, classTemplateModel, new CSharpDefaultValueGenerator(resolver, settings), settings)
 {
     _property = property;
     _settings = settings;
     _resolver = resolver;
 }
        /// <summary>Initializes a new instance of the <see cref="CSharpOperationModel" /> class.</summary>
        /// <param name="operation">The operation.</param>
        /// <param name="settings">The settings.</param>
        /// <param name="generator">The generator.</param>
        /// <param name="resolver">The resolver.</param>
        public CSharpOperationModel(
            SwaggerOperation operation,
            SwaggerToCSharpGeneratorSettings settings,
            SwaggerToCSharpGeneratorBase generator,
            CSharpTypeResolver resolver)
            : base(resolver.ExceptionSchema, operation, resolver, generator, settings)
        {
            _settings  = settings;
            _operation = operation;
            _generator = generator;
            _resolver  = resolver;

            var parameters = _operation.ActualParameters.ToList();

            if (settings.GenerateOptionalParameters)
            {
                if (generator is SwaggerToCSharpControllerGenerator)
                {
                    parameters = parameters.OrderBy(p => !p.IsRequired).ThenBy(p => p.Default == null).ToList();
                }
                else
                {
                    parameters = parameters.OrderBy(p => !p.IsRequired).ToList();
                }
            }

            Parameters = parameters.Select(parameter =>
                                           new CSharpParameterModel(parameter.Name, GetParameterVariableName(parameter, _operation.Parameters),
                                                                    ResolveParameterType(parameter), parameter, parameters,
                                                                    _settings.CodeGeneratorSettings,
                                                                    _generator))
                         .ToList();
        }
        public IEnumerable <CodeArtifact> GenerateArtifacts(SigSpecDocument document)
        {
            var resolver = new CSharpTypeResolver(_settings.CSharpGeneratorSettings);

            resolver.RegisterSchemaDefinitions(document.Definitions);

            var artifacts = new List <CodeArtifact>();

            foreach (var hub in document.Hubs)
            {
                var hubModel = new HubModel(hub.Key, hub.Value, resolver);
                var template = _settings.CSharpGeneratorSettings.TemplateFactory.CreateTemplate("CSharp", "Hub", hubModel);
                artifacts.Add(new CodeArtifact(hubModel.Name, CodeArtifactType.Class, CodeArtifactLanguage.CSharp, CodeArtifactCategory.Client, template.Render()));
            }

            if (_settings.GenerateDtoTypes)
            {
                var generator = new CSharpGenerator(document, _settings.CSharpGeneratorSettings, resolver);
                var types     = generator.GenerateTypes();
                return(artifacts.Concat(types));
            }
            else
            {
                var generator = new CSharpGenerator(document, _settings.CSharpGeneratorSettings, resolver);
                return(artifacts.Concat(generator.GenerateTypes()));
            }
        }
Exemple #9
0
        /// <summary>
        /// OpenApi描述
        /// </summary>
        /// <param name="document">Swagger文档</param>
        public OpenApiDoc(OpenApiDocument document)
        {
            this.Document = document;
            this.Settings = new HttpApiSettings();

            this.resolver = CSharpGeneratorBase
                            .CreateResolverWithExceptionSchema(this.Settings.CSharpGeneratorSettings, document);
        }
        /// <summary>
        /// Swagger描述
        /// </summary>
        /// <param name="document">Swagger文档</param>
        public Swagger(SwaggerDocument document)
        {
            this.Document = document;
            this.Settings = new HttpApiSettings();

            this.resolver = SwaggerToCSharpGeneratorBase
                            .CreateResolverWithExceptionSchema(this.Settings.CSharpGeneratorSettings, document);
        }
        internal PropertyModel(JsonProperty property, CSharpTypeResolver resolver, CSharpGeneratorSettings settings)
            : base(property, new DefaultValueGenerator(resolver))
        {
            _property = property;
            _settings = settings;
            _resolver = resolver;

            PropertyName = ConversionUtilities.ConvertToUpperCamelCase(GetGeneratedPropertyName(), true);
        }
 /// <summary>Initializes a new instance of the <see cref="CSharpRefitOperationModel" /> class.</summary>
 /// <param name="operation">The operation.</param>
 /// <param name="settings">The settings.</param>
 /// <param name="generator">The generator.</param>
 /// <param name="resolver">The resolver.</param>
 public CSharpRefitOperationModel(OpenApiOperation operation, CSharpRefitGeneratorSettings settings,
                                  CSharpRefitGenerator generator, CSharpTypeResolver resolver)
     : base(operation, settings, generator, resolver)
 {
     _operation = operation;
     _generator = generator;
     _resolver  = resolver;
     _settings  = settings;
 }
        /// <summary>Initializes a new instance of the <see cref="SwaggerToCSharpGenerator"/> class.</summary>
        /// <param name="service">The service.</param>
        /// <exception cref="ArgumentNullException"><paramref name="service"/> is <see langword="null" />.</exception>
        public SwaggerToCSharpGenerator(SwaggerService service)
        {
            if (service == null)
                throw new ArgumentNullException("service");

            _service = service;
            _resolver = new CSharpTypeResolver(_service.Definitions.Select(p => p.Value).ToArray());
            //            _types = _service.Definitions.ToDictionary(t => t.Key, t => new CSharpClassGenerator(t.Value, _resolver));
        }
Exemple #14
0
        internal PropertyModel(JsonProperty property, CSharpTypeResolver resolver, CSharpGeneratorSettings settings)
            : base(property, new DefaultValueGenerator(resolver), settings)
        {
            _property = property;
            _settings = settings;
            _resolver = resolver;

            PropertyName = ConversionUtilities.ConvertToUpperCamelCase(GetGeneratedPropertyName(), true);
        }
        public ClassTemplateModel(string typeName, CSharpGeneratorSettings settings, CSharpTypeResolver resolver, JsonSchema4 schema, IEnumerable<PropertyModel> properties)
        {
            _resolver = resolver;
            _schema = schema;
            _settings = settings;

            Class = typeName;
            Properties = properties;
        }
        public ClassTemplateModel(string typeName, CSharpGeneratorSettings settings, CSharpTypeResolver resolver, JsonSchema4 schema, IEnumerable <PropertyModel> properties)
        {
            _resolver = resolver;
            _schema   = schema;
            _settings = settings;

            Class      = typeName;
            Properties = properties;
        }
        public DefaultValueGeneratorTests()
        {
            var csharpSettings = new CSharpGeneratorSettings();

            _csharpTypeResolver = new CSharpTypeResolver(csharpSettings);
            _csharpGenerator    = new CSharpValueGenerator(csharpSettings);

            _typescriptSettings  = new TypeScriptGeneratorSettings();
            _typescriptGenerator = new TypeScriptValueGenerator(_typescriptSettings);
        }
 internal PropertyModel(JsonProperty property, CSharpTypeResolver resolver, CSharpGeneratorSettings settings) : base(property)
 {
     Name           = property.Name;
     HasDescription = !string.IsNullOrEmpty(property.Description);
     Description    = ConversionUtilities.RemoveLineBreaks(property.Description);
     PropertyName   = ConversionUtilities.ConvertToUpperCamelCase(property.Name);
     FieldName      = ConversionUtilities.ConvertToLowerCamelCase(property.Name);
     Required       = property.IsRequired && settings.RequiredPropertiesMustBeDefined ? "Required.Always" : "Required.Default";
     IsStringEnum   = property.ActualPropertySchema.IsEnumeration && property.ActualPropertySchema.Type == JsonObjectType.String;
     Type           = resolver.Resolve(property.ActualPropertySchema, property.IsNullable, property.Name);
 }
 /// <summary>Initializes a new instance of the <see cref="PropertyModel"/> class.</summary>
 /// <param name="classTemplateModel">The class template model.</param>
 /// <param name="property">The property.</param>
 /// <param name="typeResolver">The type resolver.</param>
 /// <param name="settings">The settings.</param>
 public PropertyModel(
     ClassTemplateModel classTemplateModel,
     JsonSchemaProperty property,
     CSharpTypeResolver typeResolver,
     CSharpGeneratorSettings settings)
     : base(property, classTemplateModel, typeResolver, settings)
 {
     _property = property;
     _settings = settings;
     _resolver = typeResolver;
 }
Exemple #20
0
        /// <summary>Initializes a new instance of the <see cref="ClassTemplateModel"/> class.</summary>
        /// <param name="typeName">Name of the type.</param>
        /// <param name="settings">The settings.</param>
        /// <param name="resolver">The resolver.</param>
        /// <param name="schema">The schema.</param>
        public ClassTemplateModel(string typeName, CSharpGeneratorSettings settings, CSharpTypeResolver resolver, JsonSchema4 schema)
        {
            _resolver = resolver;
            _schema   = schema;
            _settings = settings;

            Class      = typeName;
            Properties = _schema.ActualProperties.Values
                         .Where(p => !p.IsInheritanceDiscriminator)
                         .Select(property => new PropertyModel(this, property, _resolver, _settings))
                         .ToList();
        }
Exemple #21
0
        /// <summary>Creates a new resolver, adds the given schema definitions and registers an exception schema if available.</summary>
        /// <param name="settings">The settings.</param>
        /// <param name="document">The document </param>
        public static CSharpTypeResolver CreateResolverWithExceptionSchema(CSharpGeneratorSettings settings, OpenApiDocument document)
        {
            var exceptionSchema = document.Definitions.ContainsKey("Exception") ? document.Definitions["Exception"] : null;

            var resolver = new CSharpTypeResolver(settings, exceptionSchema);

            resolver.RegisterSchemaDefinitions(document.Definitions
                                               .Where(p => p.Value != exceptionSchema)
                                               .ToDictionary(p => p.Key, p => p.Value));

            return(resolver);
        }
Exemple #22
0
        public ClassTemplateModel(string typeName, CSharpGeneratorSettings settings, CSharpTypeResolver resolver, JsonSchema4 schema, IEnumerable <PropertyModel> properties)
        {
            Class     = typeName;
            Namespace = settings.Namespace;

            HasDescription = !(schema is JsonProperty) && !string.IsNullOrEmpty(schema.Description);
            Description    = ConversionUtilities.RemoveLineBreaks(schema.Description);

            Inpc = settings.ClassStyle == CSharpClassStyle.Inpc;

            var hasInheritance = schema.AllOf.Count == 1;

            HasInheritance = hasInheritance;
            Inheritance    = GenerateInheritanceCode(settings, resolver, schema, hasInheritance);

            Properties = properties;
        }
Exemple #23
0
        /// <summary>Initializes a new instance of the <see cref="PropertyModel"/> class.</summary>
        /// <param name="classTemplateModel">The class template model.</param>
        /// <param name="property">The property.</param>
        /// <param name="typeResolver">The type resolver.</param>
        /// <param name="settings">The settings.</param>
        public PropertyModel(
            ClassTemplateModel classTemplateModel,
            JsonSchemaProperty property,
            CSharpTypeResolver typeResolver,
            CSharpGeneratorSettings settings)
            : base(property, classTemplateModel, typeResolver, settings)
        {
            _property = property;
            _settings = settings;
            _resolver = typeResolver;

            Id = property.Id;
            if (property.Reference != null && string.IsNullOrEmpty(Id))
            {
                Id = property.Reference.Id;
            }
        }
        /// <summary>Initializes a new instance of the <see cref="CSharpFileTemplateModel" /> class.</summary>
        /// <param name="clientCode">The client code.</param>
        /// <param name="outputType">Type of the output.</param>
        /// <param name="document">The Swagger document.</param>
        /// <param name="settings">The settings.</param>
        /// <param name="generator">The client generator base.</param>
        /// <param name="resolver">The resolver.</param>
        public CSharpFileTemplateModel(
            string clientCode,
            ClientGeneratorOutputType outputType,
            SwaggerDocument document,
            SwaggerToCSharpGeneratorSettings settings,
            SwaggerToCSharpGeneratorBase generator,
            CSharpTypeResolver resolver)
        {
            _clientCode = clientCode;
            _outputType = outputType;
            _document   = document;
            _generator  = generator;
            _settings   = settings;
            _resolver   = resolver;

            Classes = GenerateDtoTypes();
        }
        public ClassBuilder(string nameSpace, eOutputType outputtype)
        {
            outputAs = outputtype;
            JsonSchema4 js = new JsonSchema4();

            csgs           = new CSharpGeneratorSettings();
            csgs.Namespace = nameSpace;
            resolver       = new CSharpTypeResolver(csgs);
            CSharpGenerator generator = new CSharpGenerator(js, csgs, resolver);

            schemaTextList = new List <RedoxJsonSchema>();
            AllObjects.Clear();
            ObjectTypeDict.Clear();
            ComplexObjectDict.Clear();
            ComplexObjectLists.Clear();
            defs = new JObject();
        }
        /// <summary>Initializes a new instance of the <see cref="CSharpFileTemplateModel" /> class.</summary>
        /// <param name="clientTypes">The client types.</param>
        /// <param name="dtoTypes">The DTO types.</param>
        /// <param name="outputType">Type of the output.</param>
        /// <param name="document">The Swagger document.</param>
        /// <param name="settings">The settings.</param>
        /// <param name="generator">The client generator base.</param>
        /// <param name="resolver">The resolver.</param>
        public CSharpFileTemplateModel(
            IEnumerable <CodeArtifact> clientTypes,
            IEnumerable <CodeArtifact> dtoTypes,
            ClientGeneratorOutputType outputType,
            OpenApiDocument document,
            CSharpGeneratorBaseSettings settings,
            CSharpGeneratorBase generator,
            CSharpTypeResolver resolver)
        {
            _outputType = outputType;
            _document   = document;
            _generator  = generator;
            _settings   = settings;
            _resolver   = resolver;
            _clientCode = clientTypes.Concatenate();

            Classes = dtoTypes.Concatenate();
        }
 /// <summary>
 /// WebApiClient的请求方法数据模型
 /// </summary>
 /// <param name="operation">Swagger操作</param>
 /// <param name="settings">设置项</param>
 /// <param name="generator">代码生成器</param>
 /// <param name="resolver">语法解析器</param>
 /// <param name="settingsTaskReturnType"></param>
 public HttpApiMethod(OpenApiOperation operation, CSharpGeneratorBaseSettings settings,
                      CSharpGeneratorBase generator, CSharpTypeResolver resolver, string settingsTaskReturnType)
     : base(operation, settings, generator, resolver)
 {
     _settingsTaskReturnType = settingsTaskReturnType;
 }
 /// <summary>Initializes a new instance of the <see cref="CSharpControllerOperationModel" /> class.</summary>
 /// <param name="operation">The operation.</param>
 /// <param name="settings">The settings.</param>
 /// <param name="generator">The generator.</param>
 /// <param name="resolver">The resolver.</param>
 public CSharpControllerOperationModel(OpenApiOperation operation, CSharpControllerGeneratorSettings settings,
                                       CSharpControllerGenerator generator, CSharpTypeResolver resolver)
     : base(operation, settings, generator, resolver)
 {
     _settings = settings;
 }
Exemple #29
0
 private static string GenerateInheritanceCode(CSharpGeneratorSettings settings, CSharpTypeResolver resolver, JsonSchema4 schema, bool hasInheritance)
 {
     if (hasInheritance)
     {
         return(": " + resolver.Resolve(schema.AllOf.First(), false, string.Empty) +
                (settings.ClassStyle == CSharpClassStyle.Inpc ? ", INotifyPropertyChanged" : ""));
     }
     else
     {
         return(settings.ClassStyle == CSharpClassStyle.Inpc ? ": INotifyPropertyChanged" : "");
     }
 }
Exemple #30
0
 /// <summary>Initializes a new instance of the <see cref="SwaggerToCSharpClientGenerator" /> class.</summary>
 /// <param name="document">The Swagger document.</param>
 /// <param name="settings">The settings.</param>
 /// <param name="resolver">The resolver.</param>
 /// <exception cref="ArgumentNullException"><paramref name="document" /> is <see langword="null" />.</exception>
 public SwaggerToCSharpClientGenerator(SwaggerDocument document, SwaggerToCSharpClientGeneratorSettings settings, CSharpTypeResolver resolver)
     : base(document, settings, resolver)
 {
     Settings  = settings;
     _document = document ?? throw new ArgumentNullException(nameof(document));
 }
Exemple #31
0
 /// <summary>
 /// WebApiClient的请求方法数据模型
 /// </summary>
 /// <param name="operation">Swagger操作</param>
 /// <param name="settings">设置项</param>
 /// <param name="generator">代码生成器</param>
 /// <param name="resolver">语法解析器</param>
 public HttpApiMethod(OpenApiOperation operation, CSharpGeneratorBaseSettings settings, CSharpGeneratorBase generator, CSharpTypeResolver resolver)
     : base(operation, settings, generator, resolver)
 {
 }
 /// <summary>Initializes a new instance of the <see cref="CSharpClassGenerator"/> class.</summary>
 /// <param name="schema">The schema.</param>
 /// <param name="resolver">The resolver.</param>
 public CSharpClassGenerator(JsonSchema4 schema, CSharpTypeResolver resolver)
 {
     _schema = schema;
     _resolver = resolver;
 }
        /// <summary>Initializes a new instance of the <see cref="SwaggerToCSharpControllerGenerator" /> class.</summary>
        /// <param name="document">The Swagger document.</param>
        /// <param name="settings">The settings.</param>
        /// <param name="resolver">The resolver.</param>
        /// <exception cref="ArgumentNullException"><paramref name="document" /> is <see langword="null" />.</exception>
        public SwaggerToCSharpControllerGenerator(SwaggerDocument document, SwaggerToCSharpControllerGeneratorSettings settings, CSharpTypeResolver resolver)
            : base(document, settings, resolver)
        {
            if (document == null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            Settings  = settings;
            _document = document;
        }
 public CustomCSharpClientGenerator(OpenApiDocument document, CSharpClientGeneratorSettings settings, CSharpTypeResolver resolver) : base(document, settings, resolver)
 {
     _document = document;
 }
 /// <summary>Initializes a new instance of the <see cref="CSharpGenerator"/> class.</summary>
 /// <param name="schema">The schema.</param>
 /// <param name="settings">The generator settings.</param>
 /// <param name="resolver">The resolver.</param>
 public CSharpGenerator(JsonSchema4 schema, CSharpGeneratorSettings settings, CSharpTypeResolver resolver)
 {
     _schema = schema;
     _resolver = resolver;
     Settings = settings;
 }