From bcf979917771f8ab9581477ffbc5c9b309665f00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Boh=C3=A1=C4=8Dek?= Date: Thu, 30 Dec 2021 00:28:55 +0100 Subject: [PATCH] feat: add nullable type converter --- .../Special/NullableTypeConverter.cs | 37 +++++++++++++++++++ .../Extensions/ServiceCollectionExtensions.cs | 1 + 2 files changed, 38 insertions(+) create mode 100644 Core/NosSmooth.Packets/Converters/Special/NullableTypeConverter.cs diff --git a/Core/NosSmooth.Packets/Converters/Special/NullableTypeConverter.cs b/Core/NosSmooth.Packets/Converters/Special/NullableTypeConverter.cs new file mode 100644 index 0000000..feb214f --- /dev/null +++ b/Core/NosSmooth.Packets/Converters/Special/NullableTypeConverter.cs @@ -0,0 +1,37 @@ +// +// NullableTypeConverter.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 Remora.Results; + +namespace NosSmooth.Packets.Converters.Special; + +/// +public class NullableTypeConverter : ISpecialTypeConverter +{ + private readonly TypeConverterRepository _typeConverterRepository; + + /// + /// Initializes a new instance of the class. + /// + /// The type converter repository. + public NullableTypeConverter(TypeConverterRepository typeConverterRepository) + { + _typeConverterRepository = typeConverterRepository; + } + + /// + public bool ShouldHandle(Type type) + => Nullable.GetUnderlyingType(type) != null; + + /// + public Result Deserialize(Type type, PacketStringEnumerator stringEnumerator) + => _typeConverterRepository.Deserialize(Nullable.GetUnderlyingType(type)!, stringEnumerator); + + /// + public Result Serialize(Type type, object? obj, PacketStringBuilder builder) + => _typeConverterRepository.Serialize(Nullable.GetUnderlyingType(type)!, obj, builder); +} \ No newline at end of file diff --git a/Core/NosSmooth.Packets/Extensions/ServiceCollectionExtensions.cs b/Core/NosSmooth.Packets/Extensions/ServiceCollectionExtensions.cs index d40a2b2..00cdf91 100644 --- a/Core/NosSmooth.Packets/Extensions/ServiceCollectionExtensions.cs +++ b/Core/NosSmooth.Packets/Extensions/ServiceCollectionExtensions.cs @@ -87,6 +87,7 @@ public static class ServiceCollectionExtensions { return serviceCollection .AddSpecialConverter() + .AddSpecialConverter() .AddSpecialConverter() .AddTypeConverter() .AddTypeConverter() -- 2.49.0