Exemple #1
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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"
            });
        }
Exemple #5
0
        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);
        }
Exemple #7
0
 protected override bool CanGenerateSchemaFor(ModelMetadata modelMetadata, JsonContract jsonContract)
 {
     return(jsonContract is JsonPrimitiveContract &&
            (modelMetadata.UnderlyingOrModelType.IsEnum || FactoryMethodMap.ContainsKey(modelMetadata.UnderlyingOrModelType)));
 }