aboutsummaryrefslogtreecommitdiff
path: root/Jellyfin.Api/ModelBinders/NullableEnumModelBinderProvider.cs
blob: 43ffdaefdcd93dc4966bb7c6794d2050473fc50c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace Jellyfin.Api.ModelBinders;

/// <summary>
/// Nullable enum model binder provider.
/// </summary>
public class NullableEnumModelBinderProvider : IModelBinderProvider
{
    /// <inheritdoc />
    public IModelBinder? GetBinder(ModelBinderProviderContext context)
    {
        var nullableType = Nullable.GetUnderlyingType(context.Metadata.ModelType);
        if (nullableType is null || !nullableType.IsEnum)
        {
            // Type isn't nullable or isn't an enum.
            return null;
        }

        var logger = context.Services.GetRequiredService<ILogger<NullableEnumModelBinder>>();
        return new NullableEnumModelBinder(logger);
    }
}