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); } } }