// // NullableWrapperConverterFactory.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.PacketSerializer.Abstractions; using NosSmooth.PacketSerializer.Converters.Special; using NosSmooth.PacketSerializer.Converters.Special.Converters; using NosSmooth.PacketSerializer.Extensions; using Remora.Results; namespace NosSmooth.PacketSerializer.Converters.Common; /// /// Converts . /// public class NullableWrapperConverterFactory : IStringConverterFactory { private readonly IServiceProvider _serviceProvider; /// /// Initializes a new instance of the class. /// /// The service provider. public NullableWrapperConverterFactory(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } /// public bool ShouldHandle(Type type) => type.GetGenericTypeDefinition() == typeof(NullableWrapper<>); /// public Result CreateTypeSerializer(Type type) { var underlyingType = type.GetGenericArguments()[0]; var serializerType = typeof(NullableWrapperConverter<>).MakeGenericType(underlyingType); try { return Result.FromSuccess ((IStringConverter)ActivatorUtilities.CreateInstance(_serviceProvider, serializerType)); } catch (Exception e) { return e; } } /// public Result> CreateTypeSerializer() => CreateTypeSerializer(typeof(T)).Cast, IStringConverter>(); }