private static Definition ConvertTypeToDefinition(Type definitionType, IList <string> hiddenTags, Stack <Type> typesStack) { DefinitionSchema schema = new DefinitionSchema { Name = definitionType.GetModelName() }; ProcessTypeAttributes(definitionType, schema); // process schema.TypeFormat = Helpers.MapSwaggerType(definitionType, null); if (schema.TypeFormat.IsPrimitiveType) { return(null); } if (schema.TypeFormat.Type == ParameterType.Integer && schema.TypeFormat.Format == "enum") { schema.Enum = new List <int>(); Type propType = definitionType; if (propType.IsGenericType && propType.GetGenericTypeDefinition() == typeof(Nullable <>)) { propType = propType.GetEnumerableType(); } List <string> listOfEnumNames = propType.GetEnumNames().ToList(); foreach (string enumName in listOfEnumNames) { schema.Enum.Add(GetEnumMemberValue(propType, enumName)); } } else if (schema.TypeFormat.Type == ParameterType.Array) { Type t = GetEnumerableType(definitionType); if (t != null) { schema.Ref = definitionType.GetModelName(); typesStack.Push(t); } } else { schema.Properties = new List <DefinitionProperty>(); TypePropertiesProcessor.ProcessProperties(definitionType, schema, hiddenTags, typesStack); TypeFieldsProcessor.ProcessFields(definitionType, schema, hiddenTags, typesStack); } return(new Definition { Schema = schema }); }
private static Definition ConvertTypeToDefinition(Type definitionType, IList <string> hiddenTags, Stack <Type> typesStack) { DefinitionSchema schema = new DefinitionSchema { Name = definitionType.GetModelName() }; ProcessTypeAttributes(definitionType, schema); // process schema.TypeFormat = Helpers.MapSwaggerType(definitionType, null); if (schema.TypeFormat.IsPrimitiveType) { return(null); } if (schema.TypeFormat.Type == ParameterType.Integer && schema.TypeFormat.Format == "enum") { schema.Enum = new List <int>(); Type propType = definitionType; if (propType.IsGenericType && propType.GetGenericTypeDefinition() == typeof(Nullable <>)) { propType = propType.GetEnumerableType(); } string enumDescription = ""; List <string> listOfEnumNames = propType.GetEnumNames().ToList(); foreach (string enumName in listOfEnumNames) { var enumMemberValue = DefinitionsBuilder.GetEnumMemberValue(propType, enumName); var enumMemberItem = Enum.Parse(propType, enumName, true); string enumMemberDescription = DefinitionsBuilder.GetEnumDescription((Enum)enumMemberItem); enumMemberDescription = (string.IsNullOrWhiteSpace(enumMemberDescription)) ? "" : $"({enumMemberDescription})"; if (schema.Description != null) { enumDescription += $"{Environment.NewLine}* `{enumMemberValue}` - {enumName} {enumMemberDescription}"; schema.Enum.Add(enumMemberValue); } } if (schema.Description != null && enumDescription != "") { schema.Description += $":{Environment.NewLine}{enumDescription}"; } } else if (schema.TypeFormat.Type == ParameterType.Array) { Type t = GetEnumerableType(definitionType); if (t != null) { schema.Ref = definitionType.GetModelName(); typesStack.Push(t); } } else { schema.Properties = new List <DefinitionProperty>(); TypePropertiesProcessor.ProcessProperties(definitionType, schema, hiddenTags, typesStack); TypeFieldsProcessor.ProcessFields(definitionType, schema, hiddenTags, typesStack); } return(new Definition { Schema = schema }); }