// // EnumStringConverterFactory.cs // // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; using Microsoft.Extensions.DependencyInjection; using NosSmooth.Packets.Converters.Special.Converters; using NosSmooth.Packets.Extensions; using NosSmooth.PacketSerializer.Abstractions; using Remora.Results; namespace NosSmooth.Packets.Converters.Special; /// /// Factory for all enum converters. /// public class EnumStringConverterFactory : IStringConverterFactory { private readonly IServiceProvider _serviceProvider; /// /// Initializes a new instance of the class. /// /// The service provider. public EnumStringConverterFactory(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } /// public bool ShouldHandle(Type type) => type.IsEnum; /// public Result CreateTypeSerializer(Type type) { var underlyingType = type.GetEnumUnderlyingType(); var serializerType = typeof(EnumStringConverter<,>).MakeGenericType(type, underlyingType); try { return Result.FromSuccess ((IStringConverter)ActivatorUtilities.CreateInstance(_serviceProvider, serializerType)); } catch (Exception e) { return e; } } /// public Result> CreateTypeSerializer() => CreateTypeSerializer(typeof(T)).Cast, IStringConverter>(); }