// // StringSerializer.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 NosSmooth.Packets.Errors; using NosSmooth.PacketSerializer.Abstractions; using Remora.Results; namespace NosSmooth.Packets.Converters.Special; /// public class StringSerializer : IStringSerializer { private readonly IStringConverterRepository _converterRepository; /// /// Initializes a new instance of the class. /// /// The repository of string converters. public StringSerializer(IStringConverterRepository converterRepository) { _converterRepository = converterRepository; } /// public Result Deserialize(Type parseType, ref PacketStringEnumerator stringEnumerator) { var converterResult = _converterRepository.GetTypeConverter(parseType); if (!converterResult.IsSuccess) { return Result.FromError(converterResult); } var deserializedResult = converterResult.Entity.Deserialize(ref stringEnumerator); if (!deserializedResult.IsSuccess) { return Result.FromError(deserializedResult); } return Result.FromSuccess(deserializedResult.Entity); } /// public Result Serialize(Type parseType, object? obj, PacketStringBuilder builder) { var converterResult = _converterRepository.GetTypeConverter(parseType); if (!converterResult.IsSuccess) { return Result.FromError(converterResult); } return converterResult.Entity.Serialize(obj, builder); } /// public Result Deserialize(ref PacketStringEnumerator stringEnumerator) { var converterResult = _converterRepository.GetTypeConverter(); if (!converterResult.IsSuccess) { return Result.FromError(converterResult); } return converterResult.Entity.Deserialize(ref stringEnumerator); } /// public Result Serialize(TParseType? obj, PacketStringBuilder builder) { var converterResult = _converterRepository.GetTypeConverter(); if (!converterResult.IsSuccess) { return Result.FromError(converterResult); } return converterResult.Entity.Serialize(obj, builder); } }