public static Schema GetSchema(ISwaggerModelCatalog modelCatalog, Type t, bool isDefinition) { if (SwaggerTypeMapping.IsMappedType(t)) { t = SwaggerTypeMapping.GetMappedType(t); } var model = modelCatalog.GetModelForType(t); var schema = new Schema(); if (model != null) { schema = model.GetSchema(isDefinition); } else if (Primitive.IsPrimitive(t)) { var primitive = Primitive.FromType(t); schema.Type = primitive.Type.ToLower(); if (!string.IsNullOrEmpty(primitive.Format)) { schema.Format = primitive.Format.ToLower(); } } return(schema); }
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); }