private void CreateArrayOrListObject(string name, object value, Type type, Type nestedType,
                                             OpenApiObject openApiObject)
        {
            if (value == null)
            {
                openApiObject.Add(name, new OpenApiNull());
                return;
            }

            var arrayObject = new OpenApiArray();

            foreach (var item in value as IEnumerable)
            {
                if (nestedType.IsSimpleType())
                {
                    var node = CreateOpenApiObject(nestedType, item);
                    arrayObject.Add(node);
                }
                else
                {
                    var arrayItemObject = new OpenApiObject();
                    var properties      = nestedType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
                    foreach (var property in properties)
                    {
                        var nodeValue = property.GetValue(item);
                        ConvertRec(GetName(property.Name), nodeValue, property.PropertyType, arrayItemObject);
                    }

                    arrayObject.Add(arrayItemObject);
                }
            }

            openApiObject.Add(GetName(name), arrayObject);
        }
예제 #2
0
        public void Apply(OpenApiSchema schema, SchemaFilterContext context)
        {
            var type = context.Type;

            if (type.IsEnum)
            {
                var values   = Enum.GetValues(type);
                var valueArr = new OpenApiArray();

                foreach (var value in values)
                {
                    var item = new OpenApiObject
                    {
                        ["name"]  = new OpenApiString(Enum.GetName(type, value)),
                        ["value"] = new OpenApiString(value.ToString())
                    };

                    valueArr.Add(item);
                }

                schema.Extensions.Add(
                    "x-ms-enum",
                    new OpenApiObject
                {
                    ["name"]          = new OpenApiString(type.Name),
                    ["modelAsString"] = new OpenApiBoolean(true),
                    ["values"]        = valueArr
                }
                    );
            }
        }
예제 #3
0
        public void Apply(OpenApiSchema schema, SchemaFilterContext context)
        {
            if (context.Type == null)
            {
                return;
            }

            var type = Nullable.GetUnderlyingType(context.Type) ?? context.Type;

            if (!type.IsEnum || schema.Extensions.ContainsKey("x-enumNames"))
            {
                return;
            }

            var enumNames = new OpenApiArray();

            enumNames.AddRange(Enum.GetNames(type).Select(_ => new OpenApiString(_)));
            schema.Extensions.Add("x-enumNames", enumNames);
            schema.Extensions.Add(
                "x-ms-enum",
                new OpenApiObject
            {
                ["name"]          = new OpenApiString(type.Name),
                ["modelAsString"] = new OpenApiBoolean(true)
            }
                );
        }
        /// <summary>
        /// Apply the filter.
        /// </summary>
        /// <param name="parameter"><see cref="OpenApiParameter"/>.</param>
        /// <param name="context"><see cref="ParameterFilterContext"/>.</param>
        public void Apply(OpenApiParameter parameter, ParameterFilterContext context)
        {
            if (!this._applyFiler)
            {
                return;
            }

            var typeInfo = context.ParameterInfo?.ParameterType ?? context.PropertyInfo?.PropertyType;

            if (typeInfo == null)
            {
                return;
            }

            var enumsArray             = new OpenApiArray();
            var enumsDescriptionsArray = new OpenApiArray();

            if (typeInfo.IsEnum)
            {
                var names = Enum.GetNames(typeInfo).Select(name => new OpenApiString(name));
                enumsArray.AddRange(names);
                if (!parameter.Extensions.ContainsKey("x-enumNames") && enumsArray.Any())
                {
                    parameter.Extensions.Add("x-enumNames", enumsArray);
                }

                if (this._includeXEnumDescriptions)
                {
                    enumsDescriptionsArray.AddRange(EnumTypeExtensions.GetEnumValuesDescription(typeInfo, this._descriptionSources, this._xmlNavigators, this._includeXEnumRemarks));
                    if (!parameter.Extensions.ContainsKey("x-enumDescriptions") && enumsDescriptionsArray.Any())
                    {
                        parameter.Extensions.Add("x-enumDescriptions", enumsDescriptionsArray);
                    }
                }
            }
            else if (typeInfo.IsGenericType && !parameter.Extensions.ContainsKey("x-enumNames"))
            {
                foreach (var genericArgumentType in typeInfo.GetGenericArguments())
                {
                    if (genericArgumentType.IsEnum)
                    {
                        var names = Enum.GetNames(genericArgumentType).Select(name => new OpenApiString(name));
                        enumsArray.AddRange(names);
                        if (!parameter.Extensions.ContainsKey("x-enumNames") && enumsArray.Any())
                        {
                            parameter.Extensions.Add("x-enumNames", enumsArray);
                        }

                        if (this._includeXEnumDescriptions)
                        {
                            enumsDescriptionsArray.AddRange(EnumTypeExtensions.GetEnumValuesDescription(genericArgumentType, this._descriptionSources, this._xmlNavigators, this._includeXEnumRemarks));
                            if (!parameter.Extensions.ContainsKey("x-enumDescriptions") && enumsDescriptionsArray.Any())
                            {
                                parameter.Extensions.Add("x-enumDescriptions", enumsDescriptionsArray);
                            }
                        }
                    }
                }
            }
        }
예제 #5
0
        public void Apply(OpenApiParameter parameter, ParameterFilterContext context)
        {
            var typeInfo   = context.ParameterInfo?.ParameterType ?? context.PropertyInfo.PropertyType;
            var enumsArray = new OpenApiArray();

            if (typeInfo.IsEnum)
            {
                var names = Enum.GetNames(typeInfo).Select(name => new OpenApiString(name));
                enumsArray.AddRange(names);
                if (!parameter.Extensions.ContainsKey("x-enumNames") && enumsArray.Any())
                {
                    parameter.Extensions.Add("x-enumNames", enumsArray);
                }
            }
            else if (typeInfo.IsGenericType && !parameter.Extensions.ContainsKey("x-enumNames"))
            {
                foreach (var genericArgumentType in typeInfo.GetGenericArguments())
                {
                    if (genericArgumentType.IsEnum)
                    {
                        var names = Enum.GetNames(genericArgumentType).Select(name => new OpenApiString(name));
                        enumsArray.AddRange(names);
                        if (!parameter.Extensions.ContainsKey("x-enumNames") && enumsArray.Any())
                        {
                            parameter.Extensions.Add("x-enumNames", enumsArray);
                        }
                    }
                }
            }
        }
예제 #6
0
        public static IOpenApiAny ToOpenApi(object obj)
        {
            if (obj is IOpenApiAny objOa)
            {
                return(objOa);
            }
            switch (obj)
            {
            case string s:
                return(new OpenApiString(s));

            case int i:
                return(new OpenApiInteger(i));

            case bool b:
                return(new OpenApiBoolean(b));

            case float f:
                return(new OpenApiFloat(f));

            case double d:
                return(new OpenApiDouble(d));

            case Enum e:
                return(ToOpenApi(e.GetCustomValue()));

            case IEnumerable enumerable:
                var arr = new OpenApiArray();
                arr.AddRange(from object o in enumerable select ToOpenApi(o));
                return(arr);

            default:
                throw new KnownException("Can't find any specific open api type for " + obj.GetType());
            }
        }
        private static IOpenApiAny GetTypeNameForExample(IEdmTypeReference edmTypeReference)
        {
            switch (edmTypeReference.TypeKind())
            {
            case EdmTypeKind.Primitive:
                if (edmTypeReference.IsBoolean())
                {
                    return(new OpenApiBoolean(true));
                }
                else
                {
                    return(new OpenApiString(edmTypeReference.AsPrimitive().PrimitiveDefinition().Name));
                }

            case EdmTypeKind.Entity:
            case EdmTypeKind.Complex:
            case EdmTypeKind.Enum:
                OpenApiObject obj = new OpenApiObject();
                obj["@odata.type"] = new OpenApiString(edmTypeReference.FullName());
                return(obj);

            case EdmTypeKind.Collection:
                OpenApiArray      array       = new OpenApiArray();
                IEdmTypeReference elementType = edmTypeReference.AsCollection().ElementType();
                array.Add(GetTypeNameForExample(elementType));
                return(array);

            case EdmTypeKind.Untyped:
            case EdmTypeKind.TypeDefinition:
            case EdmTypeKind.EntityReference:
            default:
                throw new OpenApiException("Not support for the type kind " + edmTypeReference.TypeKind());
            }
        }
예제 #8
0
        protected virtual void AttachBasicProps(OpenApiSchema schema, OpenApiObject xProps,
                                                OpenApiObject templateOptions, LinkGenerator linkGenerator)
        {
            if (ClassName != null)
            {
                xProps["className"] = OpenApiExtensions.ToOpenApi(ClassName);
            }

            if (DefaultValue != null)
            {
                xProps["defaultValue"] = OpenApiExtensions.ToOpenApi(DefaultValue);
            }

            if (Wrappers != null)
            {
                var arr = new OpenApiArray();
                arr.AddRange(from object o in Wrappers select OpenApiExtensions.ToOpenApi(o));
                xProps["wrappers"] = arr;
            }

            if (Disabled)
            {
                templateOptions["disabled"] = OpenApiExtensions.ToOpenApi(true);
            }
        }
예제 #9
0
        internal static OpenApiArray ToOpenApiArray(this IEnumerable <string> input)
        {
            var result = new OpenApiArray();

            result.AddRange(input.Select(x => new OpenApiString(x)));
            return(result);
        }
예제 #10
0
        internal static OpenApiArray ToOpenApiArray(this IEnumerable <IOpenApiAny> input)
        {
            var result = new OpenApiArray();

            result.AddRange(input);
            return(result);
        }
예제 #11
0
        public override OpenApiObject GetCustomOpenApiConfig(LinkGenerator linkGenerator)
        {
            var baseConfig = base.GetCustomOpenApiConfig(linkGenerator);
            var types      = new OpenApiArray();

            if (CanSelectExisting)
            {
                types.Add(new OpenApiObject
                {
                    { "type", new OpenApiString("autocomplete") }, { "label", new OpenApiString("Existing") },
                    { "validation", new OpenApiArray {
                          new OpenApiString("required-from-list")
                      } }
                });
                // types.Add(new OpenApiObject
                // {
                //     {"type", new OpenApiString("select")}, {"label", new OpenApiString("Existing S")},
                //     {"validation", new OpenApiArray {new OpenApiString("required-from-list")}}
                // });
            }

            if (CanAddNewOrEdit)
            {
                types.Add(new OpenApiObject
                {
                    { "type", new OpenApiString("subGroup") }, { "label", new OpenApiString("+ Add new / Edit") },
                    { "keepFieldGroup", new OpenApiBoolean(true) }
                });
            }

            baseConfig["fieldTypes"] = types;

            return(baseConfig);
        }
예제 #12
0
        internal override IDictionary <string, IOpenApiAny> ToDictionary()
        {
            var children = new OpenApiObject();

            if (Types != null && Types.Any())
            {
                var types = new OpenApiArray();
                types.AddRange(Types.Select(x => new OpenApiString(x)));

                children[TypesKey] = types;
            }

            if (VpcEndpointIds != null && VpcEndpointIds.Any())
            {
                var vpcIds = new OpenApiArray();
                vpcIds.AddRange(VpcEndpointIds.Select(x => new OpenApiString(x)));

                children[VpcEndpointIdsKey] = vpcIds;
            }

            return(new Dictionary <string, IOpenApiAny>()
            {
                { EndpointConfigurationRootKey, children }
            });
        }
예제 #13
0
        public async Task WriteOpenApiArrayAsJsonWorks(bool produceTerseOutput)
        {
            // Arrange
            var openApiObject = new OpenApiObject
            {
                { "stringProp", new OpenApiString("stringValue1") },
                { "objProp", new OpenApiObject() },
                {
                    "arrayProp",
                    new OpenApiArray
                    {
                        new OpenApiBoolean(false)
                    }
                }
            };

            var array = new OpenApiArray
            {
                new OpenApiBoolean(false),
                openApiObject,
                new OpenApiString("stringValue2")
            };

            var actualJson = WriteAsJson(array, produceTerseOutput);

            // Assert
            await Verifier.Verify(actualJson).UseParameters(produceTerseOutput);
        }
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            var allowAnonymous = context.ApiDescription.CustomAttributes().OfType <AllowAnonymousAttribute>().Any();

            if (!allowAnonymous)
            {
                operation.Security.Add(new OpenApiSecurityRequirement
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Id   = "Bearer",
                                Type = ReferenceType.SecurityScheme
                            }
                        },
                        new List <string>()
                    }
                });
            }

            var attr = context.MethodInfo.GetCustomAttribute <UserClaimsAttribute>(true);

            if (attr == null)
            {
                return;
            }

            if (attr.Permissions != UserPermissions.None)
            {
                var array = new OpenApiArray();
                array.AddRange(attr.PermissionFlags.Select(p => new OpenApiString(p.ToString())));

                operation.Extensions["x-permissions"] = array;
            }

            if (attr.Reputation > 0)
            {
                operation.Extensions["x-reputation"] = new OpenApiDouble(attr.Reputation);
            }

            operation.Extensions["x-unrestricted"] = new OpenApiBoolean(attr.Unrestricted);

            operation.Parameters.Add(new OpenApiParameter
            {
                Name            = "reason",
                In              = ParameterLocation.Query,
                Required        = attr.Reason,
                AllowEmptyValue = false,
                Description     = "Reason for performing this action.",
                Schema          = new OpenApiSchema
                {
                    Type      = "string",
                    MinLength = UserClaimsAttribute.MinReasonLength
                }
            });
        }
예제 #15
0
 public void Apply(OpenApiSchema schema, SchemaFilterContext context)
 {
     if (context.Type.IsEnum)
     {
         var array = new OpenApiArray();
         array.AddRange(Enum.GetNames(context.Type).Select(n => new OpenApiString(n)));
         schema.Extensions.Add("x-enumNames", array);
     }
 }
예제 #16
0
 public void Apply(OpenApiSchema schema, SchemaFilterContext context)
 {
     if (context.Type.IsEnum)
     {
         var names = new OpenApiArray();
         names.AddRange(Enum.GetNames(context.Type).Select(x => new OpenApiString(x)));
         schema.Extensions.Add(new KeyValuePair <string, IOpenApiExtension>("x-enum-varnames", names));
     }
 }
        private bool TryParse(JsonElement token, out IOpenApiAny?any)
        {
            any = null;

            switch (token.ValueKind)
            {
            case JsonValueKind.Array:
                var array = new OpenApiArray();

                foreach (var value in token.EnumerateArray())
                {
                    if (TryParse(value, out var child))
                    {
                        array.Add(child);
                    }
                }

                any = array;
                return(true);

            case JsonValueKind.False:
                any = new OpenApiBoolean(false);
                return(true);

            case JsonValueKind.True:
                any = new OpenApiBoolean(true);
                return(true);

            case JsonValueKind.Number:
                any = new OpenApiDouble(token.GetDouble());
                return(true);

            case JsonValueKind.String:
                any = new OpenApiString(token.GetString());
                return(true);

            case JsonValueKind.Object:
                var obj = new OpenApiObject();

                foreach (var child in token.EnumerateObject())
                {
                    if (TryParse(child.Value, out var value))
                    {
                        obj[child.Name] = value;
                    }
                }

                any = obj;
                return(true);

            case JsonValueKind.Null:
            case JsonValueKind.Undefined:
            default:
                return(false);
            }
        }
예제 #18
0
        public override IOpenApiAny ParseIntoAny()
        {
            var array = new OpenApiArray();

            foreach (var node in childNodes)
            {
                array.Add(node.ParseIntoAny());
            }
            return(array);
        }
예제 #19
0
        /// <summary>
        /// Create a <see cref="OpenApiArray"/>
        /// </summary>
        /// <returns>The created Any object.</returns>
        public override IOpenApiAny CreateAny()
        {
            var array = new OpenApiArray();

            foreach (var node in this)
            {
                array.Add(node.CreateAny());
            }

            return(array);
        }
예제 #20
0
        private static IOpenApiAny CreateOpenApiArray(JsonElement jsonElement)
        {
            var openApiArray = new OpenApiArray();

            foreach (var item in jsonElement.EnumerateArray())
            {
                openApiArray.Add(CreateFromJsonElement(item));
            }

            return(openApiArray);
        }
예제 #21
0
        private static OpenApiArray ToOpenApiArray(Type type, object instance)
        {
            var itemType = GetAnyElementType(type);
            var array    = default(OpenApiArray);

            if (itemType != null)
            {
                array = new OpenApiArray();
                array.AddRange(((IEnumerable)instance).Cast <object>().Select(x => GetStructValue(itemType ?? x.GetType(), x) ?? ToOpenApiAny(itemType ?? x.GetType(), x)));
            }
            return(array);
        }
예제 #22
0
        static public IOpenApiAny GetExample(Type parameter, TypeMaps maps, OpenApiComponents components)
        {
            if (components.Schemas.ContainsKey(parameter.Name))
            {
                return(components.Schemas[parameter.Name].Example);
            }

            if (maps.ContainsMap(parameter))
            {
                return(maps.GetMap(parameter).OpenApiExample);
            }
            else if (parameter == typeof(string))
            {
                int randomNum = new Random().Next() % 3;
                var words     = new string[] { "foo", "bar", "baz" };
                return(new OpenApiString(words[randomNum]));
            }
            else if (IsNumericType(parameter))
            {
                int randomNum = new Random().Next() % 400;
                return(new OpenApiInteger(randomNum));
            }
            else if (parameter == typeof(bool))
            {
                int randomNum = new Random().Next() % 1;
                return(new OpenApiBoolean(randomNum == 0));
            }
            else if (parameter.GetInterfaces().Contains(typeof(IEnumerable)))
            {
                var exampleArr = new OpenApiArray();
                int randomNum  = new Random().Next() % 3;
                for (int _ = 0; _ < randomNum + 1; _++)
                {
                    var innerType = parameter.GetElementType() ?? parameter.GenericTypeArguments[0];
                    exampleArr.Add(GetExample(innerType, maps, components));
                }

                return(exampleArr);
            }
            else
            {
                if (parameter.GetProperties().Length == 0)
                {
                    return(new OpenApiNull());
                }
                var example = new OpenApiObject();
                foreach (var prop in parameter.GetProperties())
                {
                    example.Add(prop.Name, GetExample(prop.PropertyType, maps, components));
                }
                return(example);
            }
        }
예제 #23
0
        internal override IDictionary <string, IOpenApiAny> ToDictionary()
        {
            var children = new OpenApiObject();

            if (AllowOrigins != null && AllowOrigins.Any())
            {
                var allowOrigins = new OpenApiArray();
                allowOrigins.AddRange(AllowOrigins.Select(x => new OpenApiString(x)));

                children[AllowOriginsKey] = allowOrigins;
            }

            if (AllowCredentials.HasValue)
            {
                children[AllowCredentialsKey] = new OpenApiBoolean(AllowCredentials.Value);
            }

            if (ExposeHeaders != null && ExposeHeaders.Any())
            {
                var exposeHeaders = new OpenApiArray();
                exposeHeaders.AddRange(ExposeHeaders.Select(x => new OpenApiString(x)));

                children[ExposeHeadersKey] = exposeHeaders;
            }

            if (MaxAge.HasValue)
            {
                children[MaxAgeKey] = new OpenApiInteger(MaxAge.Value);
            }

            if (AllowMethods != null && AllowMethods.Any())
            {
                var allowMethods = new OpenApiArray();
                allowMethods.AddRange(AllowMethods.Select(x => new OpenApiString(x)));

                children[AllowMethodsKey] = allowMethods;
            }

            if (AllowHeaders != null && AllowHeaders.Any())
            {
                var allowHeaders = new OpenApiArray();
                allowHeaders.AddRange(AllowHeaders.Select(x => new OpenApiString(x)));

                children[AllowHeadersKey] = allowHeaders;
            }

            return(new Dictionary <string, IOpenApiAny>()
            {
                { CORSRootKey, children }
            });
        }
        public void Apply(OpenApiSchema schema, SchemaFilterContext context)
        {
            var type = Nullable.GetUnderlyingType(context.Type) ?? context.Type;

            if (!type.IsEnum || schema.Extensions.ContainsKey("x-enumNames"))
            {
                return;
            }

            var enumNames = new OpenApiArray();

            enumNames.AddRange(Enum.GetNames(type).Select(_ => new OpenApiString(_)));
            schema.Extensions.Add("x-enumNames", enumNames);
        }
예제 #25
0
        public void Apply(OpenApiSchema schema, SchemaFilterContext context)
        {
            if (!TypeHelper.IsSerializeAttribute(context.Type) &&
                !TypeHelper.IsEnumerable(context.Type) &&
                context.Type != typeof(object))
            {
                //if (context.Type.Name == "UserReg")
                //{ }

                schema.Type = "object";
                schema.Properties.Clear();
                schema.AdditionalPropertiesAllowed = true;

                OpenApiSchema baseSchema = GetBaseSchema(context);
                if (baseSchema != null)
                {
                    schema.AllOf = new List <OpenApiSchema> {
                        baseSchema
                    };
                }

                if (TypeHelper.IsBaseType(context.Type, typeof(DBItem)))
                {
                    var table = DBTable.GetTableAttributeInherit(context.Type);
                    if (table != null)
                    {
                        ApplyTable(schema, context, table);
                        return;
                    }
                }
                ApplyObject(schema, context);
            }
            else if (context.Type.IsEnum)
            {
                var items = EnumItem.GetEnumItems(context.Type);

                var namesArray = new OpenApiArray();
                namesArray.AddRange(items.Select(p => new OpenApiString(p.Name)));
                schema.Extensions.Add("x-enumNames", namesArray);

                var textArray = new OpenApiArray();
                textArray.AddRange(items.Select(p => new OpenApiString(p.Text)));
                schema.Extensions.Add("x-enumMembers", textArray);

                if (context.Type.GetCustomAttribute <FlagsAttribute>() != null)
                {
                    schema.Extensions.Add("x-flags", new OpenApiInteger(Enum.GetValues(context.Type).Cast <int>().First()));
                }
            }
        }
        /// <inheritdoc/>
        protected override void SetExtensions(OpenApiPathItem item)
        {
            if (!Context.Settings.ShowMsDosGroupPath)
            {
                return;
            }

            IList <ODataPath> samePaths = new List <ODataPath>();

            foreach (var path in Context.AllPaths.Where(p => p.Kind == ODataPathKind.NavigationProperty && p != Path))
            {
                bool lastIsKeySegment = path.LastSegment is ODataKeySegment;
                if (LastSegmentIsKeySegment != lastIsKeySegment)
                {
                    continue;
                }

                ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;
                if (NavigationSource != navigationSourceSegment.NavigationSource)
                {
                    continue;
                }

                ODataNavigationPropertySegment npSegment = path.LastSegment as ODataNavigationPropertySegment;
                if (npSegment == null)
                {
                    npSegment = path.Segments[path.Count - 2] as ODataNavigationPropertySegment;
                }
                if (NavigationProperty != npSegment.NavigationProperty)
                {
                    continue;
                }

                samePaths.Add(path);
            }

            if (samePaths.Any())
            {
                OpenApiArray           array    = new OpenApiArray();
                OpenApiConvertSettings settings = Context.Settings.Clone();
                settings.EnableKeyAsSegment = Context.KeyAsSegment;
                foreach (var p in samePaths)
                {
                    array.Add(new OpenApiString(p.GetPathItemName(settings)));
                }

                item.Extensions.Add(Constants.xMsDosGroupPath, array);
            }
        }
예제 #27
0
        private static IOpenApiAny CreateOpenApiArray(JsonElement jsonElement)
        {
            var openApiArray = new OpenApiArray();

            foreach (var item in jsonElement.EnumerateArray())
            {
                var json = item.ValueKind == JsonValueKind.String
                    ? $"\"{item}\""
                    : item.ToString();

                openApiArray.Add(CreateFromJson(json));
            }

            return(openApiArray);
        }
예제 #28
0
        private static IOpenApiAny CreateOpenApiArray(IEnumerable <JsonElement> jsonElements)
        {
            var openApiArray = new OpenApiArray();

            foreach (var jsonElement in jsonElements)
            {
                var json = jsonElement.ValueKind == JsonValueKind.String
                    ? $"\"{jsonElement}\""
                    : jsonElement.ToString();

                openApiArray.Add(CreateFromJson(json));
            }

            return(openApiArray);
        }
예제 #29
0
        private static void AddEnumParamSpec(OpenApiParameter parameter, Type type, ParameterFilterContext context)
        {
            var schema = context.SchemaGenerator.GenerateSchema(type, context.SchemaRepository);

            if (schema.Reference == null)
            {
                return;
            }

            parameter.Schema = schema;

            var enumNames = new OpenApiArray();

            enumNames.AddRange(Enum.GetNames(type).Select(_ => new OpenApiString(_)));
            schema.Extensions.Add("x-enumNames", enumNames);
        }
예제 #30
0
        private static void AddEnumSpec(Type type, ParameterFilterContext context)
        {
            var schema = context.SchemaRepository.Schemas.GetOrAdd($"#/definitions/{type.Name}", () =>
                                                                   context.SchemaGenerator.GenerateSchema(type, context.SchemaRepository)
                                                                   );

            if (schema.Reference == null || !type.IsEnum)
            {
                return;
            }

            var enumNames = new OpenApiArray();

            enumNames.AddRange(Enum.GetNames(type).Select(_ => new OpenApiString(_)));
            schema.Extensions.Add("x-enumNames", enumNames);
        }