public void Apply([NotNull] OpenApiSchema schema, [NotNull] SchemaFilterContext context)
        {
            if ((schema == null) || (context == null))
            {
                throw new ArgumentNullException(nameof(schema) + " || " + nameof(context));
            }

            if (!context.Type.IsEnum)
            {
                return;
            }

            if (context.Type.IsDefined(typeof(FlagsAttribute), false))
            {
                schema.Format = "flags";
            }

            OpenApiObject definition = new OpenApiObject();

            foreach (object enumValue in context.Type.GetEnumValues())
            {
                string enumName = Enum.GetName(context.Type, enumValue);

                if (string.IsNullOrEmpty(enumName))
                {
                    enumName = enumValue.ToString();

                    if (string.IsNullOrEmpty(enumName))
                    {
                        continue;
                    }
                }

                IOpenApiAny enumObject;

                if (TryCast(enumValue, out int intValue))
                {
                    enumObject = new OpenApiInteger(intValue);
                }
                else if (TryCast(enumValue, out long longValue))
                {
                    enumObject = new OpenApiLong(longValue);
                }
                else if (TryCast(enumValue, out ulong ulongValue))
                {
                    // OpenApi spec doesn't support ulongs as of now
                    enumObject = new OpenApiString(ulongValue.ToString());
                }
                else
                {
                    throw new ArgumentOutOfRangeException(nameof(enumValue));
                }

                definition.Add(enumName, enumObject);
            }

            schema.AddExtension("x-definition", definition);
        }
        public void Apply(OpenApiSchema schema, SchemaFilterContext context)
        {
            NullGuard.NotNull(schema, nameof(schema))
            .NotNull(schema, nameof(schema));

            if (context.Type != typeof(ErrorModel))
            {
                return;
            }

            schema.AddExtension("x-error-codes", new ErrorCodeMetadataCollection(new CoreModelConverter()));
        }
        private static void WriteJsonSchema(OpenApiSchema schema,
                                            IEnumerable <OutputParameter> props,
                                            NamingMappingHandler namingMappingHandler,
                                            bool addRequired,
                                            bool forSwagger2)
        {
            schema.Type = "object";
            var names = namingMappingHandler.GetNames(props.Select(p => p.SqlName))
                        .GetEnumerator();

            if (schema.Xml == null)
            {
                schema.Xml = new OpenApiXml();
            }
            schema.Xml.Name = "tr";//it's always tr
            if (schema.Required == null && addRequired)
            {
                schema.Required = new HashSet <string>();
            }
            foreach (var prop in props)
            {
                OpenApiSchema property = new OpenApiSchema();
                property.Type = prop.DbType.JsType;
                if (prop.DbType.JsFormat != null)
                {
                    property.Format = prop.DbType.JsFormat;
                }
                property.Nullable = true;
                if (forSwagger2)
                {
                    property.AddExtension("x-nullable", new OpenApiBoolean(true));
                }
                names.MoveNext();
                schema.Properties.Add(names.Current, property);
                if (addRequired)
                {
                    schema.Required !.Add(names.Current);
                }
            }
        }