M Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BasicInlineConverterGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BasicInlineConverterGenerator.cs +11 -1
@@ 30,8 30,18 @@ public class BasicInlineConverterGenerator : IInlineConverterGenerator
public IError? GenerateSerializerPart(IndentedTextWriter textWriter, PacketInfo packet)
{
var parameter = packet.Parameters.Current;
+ if (parameter.Nullable)
+ {
+ textWriter.WriteLine("if (obj is null)");
+ textWriter.WriteLine("{");
+ textWriter.WriteLine("builder.Append('-');");
+ textWriter.WriteLine("}");
+ textWriter.WriteLine("else");
+ }
+ textWriter.WriteLine("{");
textWriter.WriteLine
- ($"builder.Append(obj.{parameter.Name}{(parameter.Nullable ? "?" : string.Empty)}.ToString() ?? \"-\");");
+ ($"builder.Append(obj.{parameter.Name});");
+ textWriter.WriteLine("}");
return null;
}
M Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BoolInlineConverterGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BoolInlineConverterGenerator.cs +2 -2
@@ 27,14 27,14 @@ public class BoolInlineConverterGenerator : IInlineConverterGenerator
textWriter.WriteLine($"if (obj.{parameter.Name} is null)");
textWriter.WriteLine("{");
textWriter.Indent++;
- textWriter.WriteLine("builder.Append(\"-\");");
+ textWriter.WriteLine("builder.Append('-');");
textWriter.Indent--;
textWriter.WriteLine("}");
textWriter.WriteLine("else");
}
textWriter.WriteLine("{");
textWriter.Indent++;
- textWriter.WriteLine($"builder.Append(obj.{parameter.Name} ? \"1\" : \"0\");");
+ textWriter.WriteLine($"builder.Append(obj.{parameter.Name} ? '1' : '0');");
textWriter.Indent--;
textWriter.WriteLine("}");
return null;
M Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/EnumInlineConverterGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/EnumInlineConverterGenerator.cs +13 -4
@@ 34,10 34,19 @@ public class EnumInlineConverterGenerator : IInlineConverterGenerator
{
var parameter = packet.Parameters.Current;
var underlyingType = ((INamedTypeSymbol)parameter.Type).EnumUnderlyingType!.ToString();
+ if (parameter.Nullable)
+ {
+ textWriter.WriteLine("if (obj is null)");
+ textWriter.WriteLine("{");
+ textWriter.WriteLine("builder.Append('-');");
+ textWriter.WriteLine("}");
+ textWriter.WriteLine("else");
+ }
+ textWriter.WriteLine("{");
textWriter.WriteLine
- (
- $"builder.Append((({underlyingType}?)obj.{parameter.Name}{(parameter.Nullable ? "?" : string.Empty)}).ToString() ?? \"-\");"
- );
+ ($"builder.Append(({underlyingType})obj.{parameter.Name});");
+ textWriter.WriteLine("}");
+
return null;
}
@@ 89,4 98,4 @@ public static Result<{type}?> ParseEnum{type.ToString().Replace('.', '_')}(IType
);
}
}
-}>
\ No newline at end of file
+}
M Core/NosSmooth.Packets/Converters/Basic/BoolTypeConverter.cs => Core/NosSmooth.Packets/Converters/Basic/BoolTypeConverter.cs +1 -1
@@ 17,7 17,7 @@ public class BoolTypeConverter : BaseTypeConverter<bool>
/// <inheritdoc />
public override Result Serialize(bool obj, PacketStringBuilder builder)
{
- builder.Append(obj ? "1" : "0");
+ builder.Append(obj ? '1' : '0');
return Result.FromSuccess();
}
M Core/NosSmooth.Packets/Converters/Common/NameStringConverter.cs => Core/NosSmooth.Packets/Converters/Common/NameStringConverter.cs +1 -1
@@ 20,7 20,7 @@ public class NameStringConverter : BaseTypeConverter<NameString>
{
if (obj is null)
{
- builder.Append("-");
+ builder.Append('-');
return Result.FromSuccess();
}
M Core/NosSmooth.Packets/Converters/Packets/UpgradeRareSubPacketConverter.cs => Core/NosSmooth.Packets/Converters/Packets/UpgradeRareSubPacketConverter.cs +1 -1
@@ 20,7 20,7 @@ public class UpgradeRareSubPacketConverter : BaseTypeConverter<UpgradeRareSubPac
{
if (obj is null)
{
- builder.Append("-");
+ builder.Append('-');
return Result.FromSuccess();
}
builder.Append($"{obj.Upgrade}{obj.Rare}");
M Core/NosSmooth.Packets/Converters/Special/EnumTypeConverter.cs => Core/NosSmooth.Packets/Converters/Special/EnumTypeConverter.cs +2 -2
@@ 35,11 35,11 @@ public class EnumTypeConverter : ISpecialTypeConverter
{
if (obj is null)
{
- builder.Append("-");
+ builder.Append('-');
return Result.FromSuccess();
}
- builder.Append(Convert.ToInt64(obj).ToString());
+ builder.Append(Convert.ToInt64(obj));
return Result.FromSuccess();
}
}=
\ No newline at end of file
M Core/NosSmooth.Packets/Converters/Special/ListTypeConverter.cs => Core/NosSmooth.Packets/Converters/Special/ListTypeConverter.cs +1 -3
@@ 79,7 79,7 @@ public class ListTypeConverter : ISpecialTypeConverter
{
if (obj is null)
{
- builder.Append("-");
+ builder.Append('-');
return Result.FromSuccess();
}
@@ 94,14 94,12 @@ public class ListTypeConverter : ISpecialTypeConverter
}
var serializeResult = _typeConverterRepository.Serialize(genericType, item, builder);
- builder.ReplaceWithParentSeparator();
builder.PopLevel();
if (!serializeResult.IsSuccess)
{
return serializeResult;
}
}
- builder.ReplaceWithParentSeparator();
return Result.FromSuccess();
}
M Core/NosSmooth.Packets/PacketStringBuilder.cs => Core/NosSmooth.Packets/PacketStringBuilder.cs +143 -1
@@ 4,6 4,7 @@
// 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 System.Collections.Generic;
using System.Text;
using Remora.Results;
@@ 121,13 122,154 @@ public class PacketStringBuilder
/// <param name="value">The value to append.</param>
public void Append(string value)
{
+ BeforeAppend();
+ _builder.Append(value);
+ AfterAppend();
+ }
+
+ /// <summary>
+ /// Appends the value to the string.
+ /// </summary>
+ /// <param name="value">The value to append.</param>
+ public void Append(int value)
+ {
+ BeforeAppend();
+ _builder.Append(value);
+ AfterAppend();
+ }
+
+ /// <summary>
+ /// Appends the value to the string.
+ /// </summary>
+ /// <param name="value">The value to append.</param>
+ public void Append(uint value)
+ {
+ BeforeAppend();
+ _builder.Append(value);
+ AfterAppend();
+ }
+
+ /// <summary>
+ /// Appends the value to the string.
+ /// </summary>
+ /// <param name="value">The value to append.</param>
+ public void Append(short value)
+ {
+ BeforeAppend();
+ _builder.Append(value);
+ AfterAppend();
+ }
+
+ /// <summary>
+ /// Appends the value to the string.
+ /// </summary>
+ /// <param name="value">The value to append.</param>
+ public void Append(char value)
+ {
+ BeforeAppend();
+ _builder.Append(value);
+ AfterAppend();
+ }
+
+ /// <summary>
+ /// Appends the value to the string.
+ /// </summary>
+ /// <param name="value">The value to append.</param>
+ public void Append(ushort value)
+ {
+ BeforeAppend();
+ _builder.Append(value);
+ AfterAppend();
+ }
+
+ /// <summary>
+ /// Appends the value to the string.
+ /// </summary>
+ /// <param name="value">The value to append.</param>
+ public void Append(long value)
+ {
+ BeforeAppend();
+ _builder.Append(value);
+ AfterAppend();
+ }
+
+ /// <summary>
+ /// Appends the value to the string.
+ /// </summary>
+ /// <param name="value">The value to append.</param>
+ public void Append(ulong value)
+ {
+ BeforeAppend();
+ _builder.Append(value);
+ AfterAppend();
+ }
+
+ /// <summary>
+ /// Appends the value to the string.
+ /// </summary>
+ /// <param name="value">The value to append.</param>
+ public void Append(byte value)
+ {
+ BeforeAppend();
+ _builder.Append(value);
+ AfterAppend();
+ }
+
+ /// <summary>
+ /// Appends the value to the string.
+ /// </summary>
+ /// <param name="value">The value to append.</param>
+ public void Append(sbyte value)
+ {
+ BeforeAppend();
+ _builder.Append(value);
+ AfterAppend();
+ }
+
+ /// <summary>
+ /// Appends the value to the string.
+ /// </summary>
+ /// <param name="value">The value to append.</param>
+ public void Append(float value)
+ {
+ BeforeAppend();
+ _builder.Append(value);
+ AfterAppend();
+ }
+
+ /// <summary>
+ /// Appends the value to the string.
+ /// </summary>
+ /// <param name="value">The value to append.</param>
+ public void Append(double value)
+ {
+ BeforeAppend();
+ _builder.Append(value);
+ AfterAppend();
+ }
+
+ /// <summary>
+ /// Appends the value to the string.
+ /// </summary>
+ /// <param name="value">The value to append.</param>
+ public void Append(decimal value)
+ {
+ BeforeAppend();
+ _builder.Append(value);
+ AfterAppend();
+ }
+
+ private void BeforeAppend()
+ {
if (_insertSeparator is not null)
{
_builder.Append(_insertSeparator);
_insertSeparator = null;
}
+ }
- _builder.Append(value);
+ private void AfterAppend()
+ {
_insertSeparator = _currentLevel.SeparatorOnce ?? _currentLevel.Separator;
_currentLevel.SeparatorOnce = null;
}