public EnumSchema(Type t, Model sModel) { Type = "string"; Ref = DefinitionsRefLocation + SwaggerBuilderConfig.ModelIdConvention(t); Description = sModel.Description; Enum = t.GetEnumNames(); }
public static Item ToItem(this Type type) { var item = new Item(); if (type.IsContainer()) { item.Type = "array"; var itemsType = type.GetElementType() ?? type.GetGenericArguments().FirstOrDefault(); item.Items = itemsType.ToItem(); } else { if (Primitive.IsPrimitive(type)) { var primitive = Primitive.FromType(type); item.Format = primitive.Format; item.Type = primitive.Type; } else { item.Ref = "#/definitions/" + SwaggerBuilderConfig.ModelIdConvention(type); } } return(item); }
public SwaggerRoot GetSwaggerJson() { var builder = new SwaggerRootBuilder(); foreach (var pathItem in this.RetrieveSwaggerPaths()) { builder.Path(pathItem.Key, pathItem.Value.PathItem); } builder.Info(_info); foreach (var model in RetrieveSwaggerModels()) { var name = SwaggerBuilderConfig.ModelIdConvention(model.ModelType); builder.Definition(name, model.GetSchema()); } foreach (var tag in RetrieveSwaggerTags()) { builder.Tag(tag); } foreach (var securityScheme in _securitySchemes) { builder.SecurityDefinition(securityScheme.Key, securityScheme.Value.Build()); } return(builder.Build()); }
public void ToModelProperty_NonPrimitive_ShouldHaveRefSet() { new SwaggerModelPropertyData { Type = typeof(TestModel) }.ToModelProperty().ShouldEqual( new ModelProperty { Ref = SwaggerBuilderConfig.ModelIdConvention(typeof(TestModel)) } ); }
public ObjectSchema(Type t, Model sModel) { Type = "object"; Ref = DefinitionsRefLocation + SwaggerBuilderConfig.ModelIdConvention(t); Required = (sModel.Required as IList <string>)?.Select(x => x.ToCamelCase()).ToList(); Description = sModel.Description; Properties = new Dictionary <string, Schema>(); foreach (var member in sModel.Properties) { Properties.Add(member.Key.ToCamelCase(), GenerateSchemaForProperty(member.Value)); } }
public EnumerableSchema(Type t, Model sModel) { Type = "array"; Items = new Item(); Type subType = t.GetGenericArguments().FirstOrDefault(); Items.Type = "object"; Items.Ref = DefinitionsRefLocation + SwaggerBuilderConfig.ModelIdConvention(subType); Ref = DefinitionsRefLocation + SwaggerBuilderConfig.ModelIdConvention(t); }
public void ToModelPropertyNonPrimitiveCollection_ShouldHaveTypeArrayAndItemsRefSet() { new SwaggerModelPropertyData { Type = typeof(TestModel[]) }.ToModelProperty().ShouldEqual( new ModelProperty { Type = "array", Items = new Item { Ref = SwaggerBuilderConfig.ModelIdConvention(typeof(TestModel)) } }, "String return type" ); }
public static T ToDataType <T>(this Type type, bool isTopLevel = false) where T : DataType, new() { var dataType = new T(); if (SwaggerTypeMapping.IsMappedType(type)) { type = SwaggerTypeMapping.GetMappedType(type); } if (type == null) { dataType.Type = "void"; return(dataType); } if (Primitive.IsPrimitive(type)) { var primitive = Primitive.FromType(type); dataType.Format = primitive.Format; dataType.Type = primitive.Type; return(dataType); } if (type.IsContainer()) { dataType.Type = "array"; var itemsType = type.GetElementType() ?? type.GetGenericArguments().FirstOrDefault(); if (Primitive.IsPrimitive(itemsType)) { var primitive = Primitive.FromType(itemsType); dataType.Items = new Item { Type = primitive.Type, Format = primitive.Format }; return(dataType); } dataType.Items = itemsType.ToItem(); return(dataType); } if (isTopLevel) { dataType.Ref = "#/definitions/" + SwaggerBuilderConfig.ModelIdConvention(type); return(dataType); } dataType.Type = SwaggerBuilderConfig.ModelIdConvention(type); return(dataType); }
public static IEnumerable <Model> ToModel(this SwaggerModelData model, IEnumerable <SwaggerModelData> knownModels = null, bool getSubModels = true) { var classProperties = model.Properties.Where(x => !Primitive.IsPrimitive(x.Type) && !x.Type.IsEnum && !x.Type.IsGenericType); var modelsData = knownModels ?? Enumerable.Empty <SwaggerModelData>(); if (getSubModels) { foreach (var swaggerModelPropertyData in classProperties) { var properties = GetPropertiesFromType(swaggerModelPropertyData.Type); var modelDataForClassProperty = modelsData.FirstOrDefault(x => x.ModelType == swaggerModelPropertyData.Type); var id = modelDataForClassProperty == null ? swaggerModelPropertyData.Type.Name : SwaggerBuilderConfig.ModelIdConvention(modelDataForClassProperty.ModelType); var description = modelDataForClassProperty == null ? swaggerModelPropertyData.Description : modelDataForClassProperty.Description; var required = modelDataForClassProperty == null ? properties.Where(p => p.Required || p.Type.IsImplicitlyRequired()) .Select(p => p.Name) .OrderBy(name => name) .ToList() : modelDataForClassProperty.Properties .Where(p => p.Required || p.Type.IsImplicitlyRequired()) .Select(p => p.Name) .OrderBy(name => name) .ToList(); if (!required.Any()) { required = null; } var modelproperties = modelDataForClassProperty == null ? properties.OrderBy(x => x.Name).ToDictionary(p => p.Name, ToModelProperty) : modelDataForClassProperty.Properties.OrderBy(x => x.Name) .ToDictionary(p => p.Name, ToModelProperty); yield return(new Model { Id = id, Description = description, Required = required, Properties = modelproperties }); } } var topLevelModel = new Model { Id = SwaggerBuilderConfig.ModelIdConvention(model.ModelType), Description = model.Description, Required = model.Properties .Where(p => p.Required || p.Type.IsImplicitlyRequired()) .Select(p => p.Name) .OrderBy(name => name) .ToList(), Properties = model.Properties .OrderBy(p => p.Name) .ToDictionary(p => p.Name, ToModelProperty) // TODO: SubTypes and Discriminator }; if (!topLevelModel.Required.Any()) { topLevelModel.Required = null; } yield return(topLevelModel); }