diff options
| author | Niels van Velzen <nielsvanvelzen@users.noreply.github.com> | 2024-03-05 00:44:54 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-04 16:44:54 -0700 |
| commit | 407cf5d0bf9d3563ae77fd34ce29ffae5af4339f (patch) | |
| tree | 2640dfb680cc4f302ec2dbeeb2a7cd9536005b80 /src/Jellyfin.Extensions/Json/Converters/JsonDefaultStringEnumConverterFactory.cs | |
| parent | 83d2bc3f9f13c62f6d3ef16c4fe75f0f5a18110d (diff) | |
Add MediaStreamProtocol enum (#10153)
* Add MediaStreamProtocol enum
* Add default handling for enum during deserialization
---------
Co-authored-by: Cody Robibero <cody@robibe.ro>
Diffstat (limited to 'src/Jellyfin.Extensions/Json/Converters/JsonDefaultStringEnumConverterFactory.cs')
| -rw-r--r-- | src/Jellyfin.Extensions/Json/Converters/JsonDefaultStringEnumConverterFactory.cs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/Jellyfin.Extensions/Json/Converters/JsonDefaultStringEnumConverterFactory.cs b/src/Jellyfin.Extensions/Json/Converters/JsonDefaultStringEnumConverterFactory.cs new file mode 100644 index 000000000..5a9bf546e --- /dev/null +++ b/src/Jellyfin.Extensions/Json/Converters/JsonDefaultStringEnumConverterFactory.cs @@ -0,0 +1,31 @@ +using System; +using System.ComponentModel; +using System.Reflection; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Jellyfin.Extensions.Json.Converters; + +/// <summary> +/// Utilizes the JsonStringEnumConverter and sets a default value if not provided. +/// </summary> +public class JsonDefaultStringEnumConverterFactory : JsonConverterFactory +{ + private static readonly JsonStringEnumConverter _baseConverterFactory = new(); + + /// <inheritdoc /> + public override bool CanConvert(Type typeToConvert) + { + return _baseConverterFactory.CanConvert(typeToConvert) + && typeToConvert.IsDefined(typeof(DefaultValueAttribute)); + } + + /// <inheritdoc /> + public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options) + { + var baseConverter = _baseConverterFactory.CreateConverter(typeToConvert, options); + var converterType = typeof(JsonDefaultStringEnumConverter<>).MakeGenericType(typeToConvert); + + return (JsonConverter?)Activator.CreateInstance(converterType, baseConverter); + } +} |
