aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Server/Filters/IgnoreEnumSchemaFilter.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Jellyfin.Server/Filters/IgnoreEnumSchemaFilter.cs')
-rw-r--r--Jellyfin.Server/Filters/IgnoreEnumSchemaFilter.cs42
1 files changed, 42 insertions, 0 deletions
diff --git a/Jellyfin.Server/Filters/IgnoreEnumSchemaFilter.cs b/Jellyfin.Server/Filters/IgnoreEnumSchemaFilter.cs
new file mode 100644
index 000000000..eb9ad03c2
--- /dev/null
+++ b/Jellyfin.Server/Filters/IgnoreEnumSchemaFilter.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using Jellyfin.Data.Attributes;
+using Microsoft.OpenApi.Any;
+using Microsoft.OpenApi.Models;
+using Swashbuckle.AspNetCore.SwaggerGen;
+
+namespace Jellyfin.Server.Filters;
+
+/// <summary>
+/// Filter to remove ignored enum values.
+/// </summary>
+public class IgnoreEnumSchemaFilter : ISchemaFilter
+{
+ /// <inheritdoc />
+ public void Apply(OpenApiSchema schema, SchemaFilterContext context)
+ {
+ if (context.Type.IsEnum || (Nullable.GetUnderlyingType(context.Type)?.IsEnum ?? false))
+ {
+ var type = context.Type.IsEnum ? context.Type : Nullable.GetUnderlyingType(context.Type);
+ if (type is null)
+ {
+ return;
+ }
+
+ var enumOpenApiStrings = new List<IOpenApiAny>();
+
+ foreach (var enumName in Enum.GetNames(type))
+ {
+ var member = type.GetMember(enumName)[0];
+ if (!member.GetCustomAttributes<OpenApiIgnoreEnumAttribute>().Any())
+ {
+ enumOpenApiStrings.Add(new OpenApiString(enumName));
+ }
+ }
+
+ schema.Enum = enumOpenApiStrings;
+ }
+ }
+}