~ruther/NosSmooth

b19b38a75c751df931881383c56576d552fb3f80 — František Boháček 3 years ago 16190e1
feat(serializer): fix null representation as stated in #18
M Packets/NosSmooth.PacketSerializer/Converters/Basic/BasicTypeConverter.cs => Packets/NosSmooth.PacketSerializer/Converters/Basic/BasicTypeConverter.cs +12 -2
@@ 19,7 19,7 @@ public abstract class BasicTypeConverter<TBasicType> : BaseStringConverter<TBasi
    /// <inheritdoc />
    public override Result Serialize(TBasicType? obj, PacketStringBuilder builder)
    {
        builder.Append(obj?.ToString() ?? "-");
        builder.Append(obj?.ToString() ?? GetNullSymbol());
        return Result.FromSuccess();
    }



@@ 32,7 32,8 @@ public abstract class BasicTypeConverter<TBasicType> : BaseStringConverter<TBasi
            return Result<TBasicType?>.FromError(nextTokenResult);
        }

        if (packetToken.Token[0] == '-' && packetToken.Token.Length == 1)
        var nullSymbol = GetNullSymbol();
        if (packetToken.Token.Length == nullSymbol.Length && packetToken.Token.StartsWith(nullSymbol))
        {
            return Result<TBasicType?>.FromSuccess(default);
        }


@@ 46,4 47,13 @@ public abstract class BasicTypeConverter<TBasicType> : BaseStringConverter<TBasi
    /// <param name="value">The value to deserialize.</param>
    /// <returns>The deserialized value or an error.</returns>
    protected abstract Result<TBasicType?> Deserialize(ReadOnlySpan<char> value);

    /// <summary>
    /// Gets the symbol that represents null.
    /// </summary>
    /// <returns>The null symbol.</returns>
    protected virtual string GetNullSymbol()
    {
        return "-1";
    }
}
\ No newline at end of file

M Packets/NosSmooth.PacketSerializer/Converters/Basic/StringTypeConverter.cs => Packets/NosSmooth.PacketSerializer/Converters/Basic/StringTypeConverter.cs +6 -0
@@ 19,4 19,10 @@ public class StringTypeConverter : BasicTypeConverter<string>
    {
        return value.ToString();
    }

    /// <inheritdoc />
    protected override string GetNullSymbol()
    {
        return "-";
    }
}
\ No newline at end of file

M Packets/NosSmooth.PacketSerializer/Converters/Special/Converters/NullableStringConverter.cs => Packets/NosSmooth.PacketSerializer/Converters/Special/Converters/NullableStringConverter.cs +12 -1
@@ 35,7 35,7 @@ public class NullableStringConverter<T> : BaseStringConverter<Nullable<T>>
    {
        if (obj is null)
        {
            builder.Append('-');
            builder.Append("-1");
            return Result.FromSuccess();
        }



@@ 45,6 45,17 @@ public class NullableStringConverter<T> : BaseStringConverter<Nullable<T>>
    /// <inheritdoc />
    public override Result<T?> Deserialize(ref PacketStringEnumerator stringEnumerator)
    {
        var nextToken = stringEnumerator.GetNextToken(out var packetToken, false);
        if (!nextToken.IsSuccess)
        {
            return Result<T?>.FromError(nextToken);
        }

        if (packetToken.Token.Length == 2 && packetToken.Token.StartsWith("-1"))
        {
            return Result<T?>.FromSuccess(null);
        }

        var result = _stringSerializer.Deserialize<T>(ref stringEnumerator);
        if (!result.IsSuccess)
        {

M Packets/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BasicInlineConverterGenerator.cs => Packets/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BasicInlineConverterGenerator.cs +2 -2
@@ 35,7 35,7 @@ public class BasicInlineConverterGenerator : IInlineConverterGenerator
        {
            textWriter.WriteLine($"if ({variableName} is null)");
            textWriter.WriteLine("{");
            textWriter.WriteLine("builder.Append('-');");
            textWriter.WriteLine("builder.Append(\"-1\");");
            textWriter.WriteLine("}");
            textWriter.WriteLine("else");
        }


@@ 76,7 76,7 @@ public static Result<{type}?> ParseBasic{type}(IStringConverter typeConverter, r
    }}

    var token = packetToken.Token;
    if (token[0] == '-' && token.Length == 1)
    if (token.Length == 2 && token.StartsWith(""-1""))
    {{
        return Result<{type}?>.FromSuccess(null);
    }}

M Packets/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BoolInlineConverterGenerator.cs => Packets/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BoolInlineConverterGenerator.cs +2 -2
@@ 28,7 28,7 @@ public class BoolInlineConverterGenerator : IInlineConverterGenerator
            textWriter.WriteLine($"if ({variableName} is null)");
            textWriter.WriteLine("{");
            textWriter.Indent++;
            textWriter.WriteLine("builder.Append('-');");
            textWriter.WriteLine("builder.Append(\"-1\");");
            textWriter.Indent--;
            textWriter.WriteLine("}");
            textWriter.WriteLine("else");


@@ 61,7 61,7 @@ public static Result<bool?> ParseBool(ref PacketStringEnumerator stringEnumerato
    }}

    var token = packetToken.Token;
    if (token[0] == '-')
    if (token.Length == 2 && token.StartsWith(""-1""))
    {{
        return Result<bool?>.FromSuccess(null);
    }}

Do not follow this link