< Summary - Jellyfin

Information
Class: Jellyfin.Api.ModelBinders.NullableEnumModelBinder
Assembly: Jellyfin.Api
File(s): /srv/git/jellyfin/Jellyfin.Api/ModelBinders/NullableEnumModelBinder.cs
Line coverage
53%
Covered lines: 7
Uncovered lines: 6
Coverable lines: 13
Total lines: 47
Line coverage: 53.8%
Branch coverage
75%
Covered branches: 3
Total branches: 4
Branch coverage: 75%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
BindModelAsync(...)75%6.6445.45%

File(s)

/srv/git/jellyfin/Jellyfin.Api/ModelBinders/NullableEnumModelBinder.cs

#LineLine coverage
 1using System;
 2using System.ComponentModel;
 3using System.Threading.Tasks;
 4using Microsoft.AspNetCore.Mvc.ModelBinding;
 5using Microsoft.Extensions.Logging;
 6
 7namespace Jellyfin.Api.ModelBinders;
 8
 9/// <summary>
 10/// Nullable enum model binder.
 11/// </summary>
 12public class NullableEnumModelBinder : IModelBinder
 13{
 14    private readonly ILogger<NullableEnumModelBinder> _logger;
 15
 16    /// <summary>
 17    /// Initializes a new instance of the <see cref="NullableEnumModelBinder"/> class.
 18    /// </summary>
 19    /// <param name="logger">Instance of the <see cref="ILogger{NullableEnumModelBinder}"/> interface.</param>
 20    public NullableEnumModelBinder(ILogger<NullableEnumModelBinder> logger)
 21    {
 122        _logger = logger;
 123    }
 24
 25    /// <inheritdoc />
 26    public Task BindModelAsync(ModelBindingContext bindingContext)
 27    {
 128        var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
 129        var elementType = bindingContext.ModelType.GetElementType() ?? bindingContext.ModelType.GenericTypeArguments[0];
 130        var converter = TypeDescriptor.GetConverter(elementType);
 131        if (valueProviderResult.Length != 0)
 32        {
 33            try
 34            {
 35                // REVIEW: This shouldn't be null here
 036                var convertedValue = converter.ConvertFromString(valueProviderResult.FirstValue!);
 037                bindingContext.Result = ModelBindingResult.Success(convertedValue);
 038            }
 039            catch (FormatException e)
 40            {
 041                _logger.LogDebug(e, "Error converting value.");
 042            }
 43        }
 44
 145        return Task.CompletedTask;
 46    }
 47}