mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-10-30 18:22:48 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| 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
 | |
|                 {
 | |
|                     var convertedValue = converter.ConvertFromString(valueProviderResult.FirstValue);
 | |
|                     bindingContext.Result = ModelBindingResult.Success(convertedValue);
 | |
|                 }
 | |
|                 catch (FormatException e)
 | |
|                 {
 | |
|                     _logger.LogDebug(e, "Error converting value.");
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return Task.CompletedTask;
 | |
|         }
 | |
|     }
 | |
| } |