// // BaseStringConverter.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 NosSmooth.PacketSerializer.Abstractions.Errors; using Remora.Results; namespace NosSmooth.PacketSerializer.Abstractions; /// /// Base type for converting objects that maps object converting methods to the actual type. /// /// The type of the object that this converts. public abstract class BaseStringConverter : IStringConverter { /// public abstract Result Serialize(TParseType? obj, ref PacketStringBuilder builder); /// public abstract Result Deserialize(ref PacketStringEnumerator stringEnumerator, DeserializeOptions options); /// Result IStringConverter.Deserialize(ref PacketStringEnumerator stringEnumerator, DeserializeOptions options) { var result = Deserialize(ref stringEnumerator, options); if (!result.IsSuccess) { return Result.FromError(result); } return Result.FromSuccess(result.Entity); } /// Result IStringConverter.Serialize(object? obj, ref PacketStringBuilder builder) { if (!(obj is TParseType parseType)) { return new WrongTypeError(this, typeof(TParseType), obj); } return Serialize(parseType, ref builder); } }