protected override OpenApiSchema GenerateSchemaFor(Type type, SchemaRepository schemaRepository) { var jsonPrimitiveContract = (JsonPrimitiveContract)ContractResolver.ResolveContract(type); var schema = jsonPrimitiveContract.UnderlyingType.IsEnum ? GenerateEnumSchema(jsonPrimitiveContract) : FactoryMethodMap[jsonPrimitiveContract.UnderlyingType](); return(schema); }
public static bool TryCreateFrom(object value, out IOpenApiAny openApiAny) { openApiAny = FactoryMethodMap.TryGetValue(value.GetType(), out Func <object, IOpenApiAny> factoryMethod) ? factoryMethod(value) : null; return(openApiAny != null); }
protected override OpenApiSchema GenerateSchemaFor(ModelMetadata modelMetadata, SchemaRepository schemaRepository, JsonContract jsonContract) { var jsonPrimitiveContract = (JsonPrimitiveContract)jsonContract; var underlyingType = modelMetadata.UnderlyingOrModelType; var schema = underlyingType.IsEnum ? GenerateEnumSchema(underlyingType, jsonPrimitiveContract) : FactoryMethodMap[underlyingType](); if (modelMetadata.IsNullableValueType) { schema.Nullable = true; } return(schema); }
protected override OpenApiSchema GenerateSchemaFor(Type type, SchemaRepository schemaRepository) { var jsonPrimitiveContract = (JsonPrimitiveContract)ContractResolver.ResolveContract(type); if (jsonPrimitiveContract.UnderlyingType.IsEnum) { return(GenerateEnumSchema(jsonPrimitiveContract)); } if (FactoryMethodMap.ContainsKey(jsonPrimitiveContract.UnderlyingType)) { return(FactoryMethodMap[jsonPrimitiveContract.UnderlyingType]()); } return(new OpenApiSchema { Type = "string" }); }
public static IOpenApiPrimitive CreateFrom(object value) { if (!FactoryMethodMap.TryGetValue(value.GetType(), out Func <object, IOpenApiPrimitive> factoryMethod)) { return(null); } return(factoryMethod(value)); }
private OpenApiSchema GenerateEnumSchema(JsonPrimitiveContract jsonPrimitiveContract) { var stringEnumConverter = (jsonPrimitiveContract.Converter as StringEnumConverter) ?? _serializerSettings.Converters.OfType <StringEnumConverter>().FirstOrDefault(); var describeAsString = Options.DescribeAllEnumsAsStrings || (stringEnumConverter != null); var describeInCamelCase = Options.DescribeStringEnumsInCamelCase || (stringEnumConverter != null && stringEnumConverter.CamelCaseText); var enumType = jsonPrimitiveContract.UnderlyingType; var enumUnderlyingType = describeAsString ? typeof(string) : enumType.GetEnumUnderlyingType(); var schema = FactoryMethodMap[enumUnderlyingType](); if (describeAsString) { schema.Enum = enumType.GetEnumNames() .Distinct() .Select(name => { name = describeInCamelCase ? name.ToCamelCase() : name; return((IOpenApiAny)(new OpenApiString(name))); }) .ToList(); } else { schema.Enum = enumType.GetEnumValues() .Cast <object>() .Distinct() .Select(value => { value = Convert.ChangeType(value, enumUnderlyingType); return(OpenApiAnyFactory.TryCreateFor(schema, value, out IOpenApiAny openApiAny) ? openApiAny : null); }) .ToList(); } return(schema); }
protected override bool CanGenerateSchemaFor(ModelMetadata modelMetadata, JsonContract jsonContract) { return(jsonContract is JsonPrimitiveContract && (modelMetadata.UnderlyingOrModelType.IsEnum || FactoryMethodMap.ContainsKey(modelMetadata.UnderlyingOrModelType))); }