public static T ToDataType <T>(this Type type, bool isTopLevel = false) where T : DataType, new() { var dataType = new T(); 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 Items { Type = primitive.Type, Format = primitive.Format }; return(dataType); } dataType.Items = new Items { Ref = SwaggerConfig.ModelIdConvention(itemsType) }; return(dataType); } if (isTopLevel) { dataType.Ref = SwaggerConfig.ModelIdConvention(type); return(dataType); } dataType.Type = SwaggerConfig.ModelIdConvention(type); return(dataType); }
public ObjectSchema(Type t, Model sModel, bool isDefinition) { if (isDefinition) { Type = "object"; 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)); } } else { Ref = DefinitionsRefLocation + SwaggerConfig.ModelIdConvention(t); } }
public static IEnumerable <Model> ToModel(this SwaggerModelData model, IEnumerable <SwaggerModelData> knownModels = null) { var classProperties = model.Properties.Where(x => !Primitive.IsPrimitive(x.Type) && !x.Type.IsEnum && !x.Type.IsGenericType); var modelsData = knownModels ?? Enumerable.Empty <SwaggerModelData>(); 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 : SwaggerConfig.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(); 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 = SwaggerConfig.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 }; yield return(topLevelModel); }