| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | using System;using System.ComponentModel;using System.Threading.Tasks;using Microsoft.AspNetCore.Mvc.ModelBinding;using Microsoft.Extensions.Logging;namespace Jellyfin.Api.ModelBinders;/// <summary>/// Nullable enum model binder./// </summary>public class NullableEnumModelBinder : IModelBinder{    private readonly ILogger<NullableEnumModelBinder> _logger;    /// <summary>    /// Initializes a new instance of the <see cref="NullableEnumModelBinder"/> class.    /// </summary>    /// <param name="logger">Instance of the <see cref="ILogger{NullableEnumModelBinder}"/> interface.</param>    public NullableEnumModelBinder(ILogger<NullableEnumModelBinder> logger)    {        _logger = logger;    }    /// <inheritdoc />    public Task BindModelAsync(ModelBindingContext bindingContext)    {        var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);        var elementType = bindingContext.ModelType.GetElementType() ?? bindingContext.ModelType.GenericTypeArguments[0];        var converter = TypeDescriptor.GetConverter(elementType);        if (valueProviderResult.Length != 0)        {            try            {                // REVIEW: This shouldn't be null here                var convertedValue = converter.ConvertFromString(valueProviderResult.FirstValue!);                bindingContext.Result = ModelBindingResult.Success(convertedValue);            }            catch (FormatException e)            {                _logger.LogDebug(e, "Error converting value.");            }        }        return Task.CompletedTask;    }}
 |