diff --git a/.vscode/launch.json b/.vscode/launch.json index da9dd103..fabbf293 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -19,10 +19,9 @@ "name": ".NET Core Launch (console)", "type": "coreclr", "request": "launch", - "preLaunchTask": "build", - "program": "${workspaceFolder}/artifacts/bin/bench/Debug/net7.0/bench.dll", + "program": "${workspaceFolder}/perf/bench/bin/Debug/net8.0/bench.dll", "args": [], - "cwd": "${workspaceFolder}/bench", + "cwd": "${workspaceFolder}/perf/bench", "console": "internalConsole", "stopAtEntry": false, "justMyCode": false, diff --git a/perf/bench/SampleTypes.cs b/perf/bench/SampleTypes.cs index 83c1c753..3180f71b 100644 --- a/perf/bench/SampleTypes.cs +++ b/perf/bench/SampleTypes.cs @@ -1,6 +1,7 @@ #nullable disable +using System; using Serde; namespace Benchmarks @@ -57,79 +58,115 @@ public partial record Location public partial record LocationWrap : IDeserialize { - [GenerateDeserialize] - private enum FieldNames : byte + static Benchmarks.Location Serde.IDeserialize.Deserialize(ref D deserializer) { - Id = 1, - Address1 = 2, - Address2 = 3, - City = 4, - State = 5, - PostalCode = 6, - Name = 7, - PhoneNumber = 8, - Country = 9, + var fieldNames = new[] + { + "Id", + "Address1", + "Address2", + "City", + "State", + "PostalCode", + "Name", + "PhoneNumber", + "Country" + }; + return deserializer.DeserializeType("Location", fieldNames, SerdeVisitor.Instance); } - public static Location Deserialize(ref D deserializer) where D : IDeserializer - { - return Deserialize(ref deserializer); - } - private sealed class LocationVisitor : IDeserializeVisitor + private sealed class SerdeVisitor : Serde.IDeserializeVisitor { - public string ExpectedTypeName => nameof(Location); + public static readonly SerdeVisitor Instance = new SerdeVisitor(); + public string ExpectedTypeName => "Benchmarks.Location"; - Location IDeserializeVisitor.VisitDictionary(ref D d) + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { - int _l_id = default!; - string _l_address1 = default!; - string _l_address2 = default!; - string _l_city = default!; - string _l_state = default!; - string _l_postalCode = default!; - string _l_name = default!; - string _l_phoneNumber = default!; - string _l_country = default!; - short _r_assignedValid = 0b0; - while (d.TryGetNextKey(out var key)) + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); + public static byte Deserialize(ref D deserializer) + where D : IDeserializer => deserializer.DeserializeString(Instance); + public string ExpectedTypeName => "string"; + + byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); + public byte VisitUtf8Span(System.ReadOnlySpan s) + { + switch (s[0]) + { + case (byte)'i'when s.SequenceEqual("id"u8): + return 1; + case (byte)'a'when s.SequenceEqual("address1"u8): + return 2; + case (byte)'a'when s.SequenceEqual("address2"u8): + return 3; + case (byte)'c'when s.SequenceEqual("city"u8): + return 4; + case (byte)'s'when s.SequenceEqual("state"u8): + return 5; + case (byte)'p'when s.SequenceEqual("postalCode"u8): + return 6; + case (byte)'n'when s.SequenceEqual("name"u8): + return 7; + case (byte)'p'when s.SequenceEqual("phoneNumber"u8): + return 8; + case (byte)'c'when s.SequenceEqual("country"u8): + return 9; + default: + return 0; + } + } + } + + Benchmarks.Location Serde.IDeserializeVisitor.VisitDictionary(ref D d) + { + int _l_id = default !; + string _l_address1 = default !; + string _l_address2 = default !; + string _l_city = default !; + string _l_state = default !; + string _l_postalcode = default !; + string _l_name = default !; + string _l_phonenumber = default !; + string _l_country = default !; + ushort _r_assignedValid = 0b0; + while (d.TryGetNextKey(out byte key)) { switch (key) { - case FieldNames.Id: + case 1: _l_id = d.GetNextValue(); - _r_assignedValid |= 1 << 0; + _r_assignedValid |= ((ushort)1) << 0; break; - case FieldNames.Address1: + case 2: _l_address1 = d.GetNextValue(); - _r_assignedValid |= 1 << 1; + _r_assignedValid |= ((ushort)1) << 1; break; - case FieldNames.Address2: + case 3: _l_address2 = d.GetNextValue(); - _r_assignedValid |= 1 << 2; + _r_assignedValid |= ((ushort)1) << 2; break; - case FieldNames.City: + case 4: _l_city = d.GetNextValue(); - _r_assignedValid |= 1 << 3; + _r_assignedValid |= ((ushort)1) << 3; break; - case FieldNames.State: + case 5: _l_state = d.GetNextValue(); - _r_assignedValid |= 1 << 4; + _r_assignedValid |= ((ushort)1) << 4; break; - case FieldNames.PostalCode: - _l_postalCode = d.GetNextValue(); - _r_assignedValid |= 1 << 5; + case 6: + _l_postalcode = d.GetNextValue(); + _r_assignedValid |= ((ushort)1) << 5; break; - case FieldNames.Name: + case 7: _l_name = d.GetNextValue(); - _r_assignedValid |= 1 << 6; + _r_assignedValid |= ((ushort)1) << 6; break; - case FieldNames.PhoneNumber: - _l_phoneNumber = d.GetNextValue(); - _r_assignedValid |= 1 << 7; + case 8: + _l_phonenumber = d.GetNextValue(); + _r_assignedValid |= ((ushort)1) << 7; break; - case FieldNames.Country: + case 9: _l_country = d.GetNextValue(); - _r_assignedValid |= 1 << 8; + _r_assignedValid |= ((ushort)1) << 8; break; } } @@ -139,27 +176,21 @@ Location IDeserializeVisitor.VisitDictionary(ref D d) throw new Serde.InvalidDeserializeValueException("Not all members were assigned"); } - var newType = new Location + var newType = new Benchmarks.Location() { Id = _l_id, Address1 = _l_address1, Address2 = _l_address2, City = _l_city, State = _l_state, - PostalCode = _l_postalCode, + PostalCode = _l_postalcode, Name = _l_name, - PhoneNumber = _l_phoneNumber, + PhoneNumber = _l_phonenumber, Country = _l_country, }; return newType; } } - private static T Deserialize(ref D deserialize) - where T : IDeserialize - where D : IDeserializer - { - return T.Deserialize(ref deserialize); - } } } \ No newline at end of file diff --git a/perf/bench/bench.csproj b/perf/bench/bench.csproj index a3367dc3..f80121e9 100644 --- a/perf/bench/bench.csproj +++ b/perf/bench/bench.csproj @@ -5,6 +5,7 @@ net8.0 enable true + true diff --git a/src/generator/Generator.Deserialize.cs b/src/generator/Generator.Deserialize.cs index 7723f614..9067cb34 100644 --- a/src/generator/Generator.Deserialize.cs +++ b/src/generator/Generator.Deserialize.cs @@ -70,7 +70,7 @@ private static MethodDeclarationSyntax GenerateDeserializeMethod( // 3. Custom type // // var fieldNames = new[] { 'field1', 'field2', 'field3' ... }; - // return deserializer.DeserializeType<'TypeName', 'GeneratedVisitorName'>('TypeName', fieldNames, visitor); + // return deserializer.DeserializeType('TypeName', fieldNames, visitor); var serdeName = SerdeBuiltInName(typeSymbol.SpecialType); var typeSyntax = ParseTypeName(typeSymbol.ToString()); @@ -80,13 +80,7 @@ private static MethodDeclarationSyntax GenerateDeserializeMethod( stmts.Add(ReturnStatement(InvocationExpression( QualifiedName( IdentifierName("deserializer"), - GenericName( - Identifier("Deserialize" + serdeName), - TypeArgumentList(SeparatedList(new TypeSyntax[] { - typeSyntax, - IdentifierName(GeneratedVisitorName) - })) - ) + IdentifierName("Deserialize" + serdeName) ), ArgumentList(SeparatedList(new[] { Argument(IdentifierName("visitor")) @@ -99,13 +93,7 @@ private static MethodDeclarationSyntax GenerateDeserializeMethod( stmts.Add(ReturnStatement(InvocationExpression( QualifiedName( IdentifierName("deserializer"), - GenericName( - Identifier("DeserializeString"), - TypeArgumentList(SeparatedList(new TypeSyntax[] { - typeSyntax, - IdentifierName(GeneratedVisitorName) - })) - ) + IdentifierName("DeserializeString") ), ArgumentList(SeparatedList(new[] { Argument(IdentifierName("visitor")) @@ -131,17 +119,11 @@ private static MethodDeclarationSyntax GenerateDeserializeMethod( ) )); - // return deserializer.DeserializeType<'TypeName', 'GeneratedVisitorName'>('TypeName', fieldNames, visitor); + // return deserializer.DeserializeType('TypeName', fieldNames, visitor); stmts.Add(ReturnStatement(InvocationExpression( QualifiedName( IdentifierName("deserializer"), - GenericName( - Identifier("DeserializeType"), - TypeArgumentList(SeparatedList(new TypeSyntax[] { - typeSyntax, - IdentifierName(GeneratedVisitorName) - }))) - ), + IdentifierName("DeserializeType")), ArgumentList(SeparatedList(new[] { Argument(StringLiteral(typeSymbol.Name)), Argument(IdentifierName("fieldNames")), @@ -262,10 +244,11 @@ _ when System.MemoryExtensions.SequenceEqual(s, "{{formatted}}"u8) => {{typeName private static MemberDeclarationSyntax GenerateFieldNameVisitor(ITypeSymbol type, string typeName, List members) { var text = $$""" -private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor +private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) where D : IDeserializer - => deserializer.DeserializeString(new FieldNameVisitor()); + => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; diff --git a/src/serde/IDeserialize.cs b/src/serde/IDeserialize.cs index 1833998c..6bf7bce4 100644 --- a/src/serde/IDeserialize.cs +++ b/src/serde/IDeserialize.cs @@ -73,25 +73,25 @@ bool TryGetNextEntry([MaybeNullWhen(false)] out (K, V) next) public interface IDeserializer { - T DeserializeAny(V v) where V : IDeserializeVisitor; - T DeserializeBool(V v) where V : IDeserializeVisitor; - T DeserializeChar(V v) where V : IDeserializeVisitor; - T DeserializeByte(V v) where V : IDeserializeVisitor; - T DeserializeU16(V v) where V : IDeserializeVisitor; - T DeserializeU32(V v) where V : IDeserializeVisitor; - T DeserializeU64(V v) where V : IDeserializeVisitor; - T DeserializeSByte(V v) where V : IDeserializeVisitor; - T DeserializeI16(V v) where V : IDeserializeVisitor; - T DeserializeI32(V v) where V : IDeserializeVisitor; - T DeserializeI64(V v) where V : IDeserializeVisitor; - T DeserializeFloat(V v) where V : IDeserializeVisitor; - T DeserializeDouble(V v) where V : IDeserializeVisitor; - T DeserializeDecimal(V v) where V : IDeserializeVisitor; - T DeserializeString(V v) where V : IDeserializeVisitor; - T DeserializeIdentifier(V v) where V : IDeserializeVisitor; - T DeserializeType(string typeName, ReadOnlySpan fieldNames, V v) where V : IDeserializeVisitor; - T DeserializeEnumerable(V v) where V : IDeserializeVisitor; - T DeserializeDictionary(V v) where V : IDeserializeVisitor; - T DeserializeNullableRef(V v) where V : IDeserializeVisitor; + T DeserializeAny(IDeserializeVisitor v); + T DeserializeBool(IDeserializeVisitor v); + T DeserializeChar(IDeserializeVisitor v); + T DeserializeByte(IDeserializeVisitor v); + T DeserializeU16(IDeserializeVisitor v); + T DeserializeU32(IDeserializeVisitor v); + T DeserializeU64(IDeserializeVisitor v); + T DeserializeSByte(IDeserializeVisitor v); + T DeserializeI16(IDeserializeVisitor v); + T DeserializeI32(IDeserializeVisitor v); + T DeserializeI64(IDeserializeVisitor v); + T DeserializeFloat(IDeserializeVisitor v); + T DeserializeDouble(IDeserializeVisitor v); + T DeserializeDecimal(IDeserializeVisitor v); + T DeserializeString(IDeserializeVisitor v); + T DeserializeIdentifier(IDeserializeVisitor v); + T DeserializeType(string typeName, ReadOnlySpan fieldNames, IDeserializeVisitor v); + T DeserializeEnumerable(IDeserializeVisitor v); + T DeserializeDictionary(IDeserializeVisitor v); + T DeserializeNullableRef(IDeserializeVisitor v); } } \ No newline at end of file diff --git a/src/serde/Wrappers.Dictionary.cs b/src/serde/Wrappers.Dictionary.cs index 0885e78e..2a68edda 100644 --- a/src/serde/Wrappers.Dictionary.cs +++ b/src/serde/Wrappers.Dictionary.cs @@ -52,7 +52,7 @@ void ISerialize>.Serialize(Dictionary val { static Dictionary IDeserialize>.Deserialize(ref D deserializer) { - return deserializer.DeserializeDictionary, Visitor>(new Visitor()); + return deserializer.DeserializeDictionary(new Visitor()); } private struct Visitor : IDeserializeVisitor> { diff --git a/src/serde/Wrappers.List.cs b/src/serde/Wrappers.List.cs index 1e50e4a8..a1e83a27 100644 --- a/src/serde/Wrappers.List.cs +++ b/src/serde/Wrappers.List.cs @@ -77,7 +77,7 @@ void ISerialize.Serialize(ISerializer serializer) { static T[] IDeserialize.Deserialize(ref D deserializer) { - return deserializer.DeserializeEnumerable(new SerdeVisitor()); + return deserializer.DeserializeEnumerable(new SerdeVisitor()); } private struct SerdeVisitor : IDeserializeVisitor { @@ -132,7 +132,7 @@ void ISerialize>.Serialize(List value, ISerializer serializer) { static List IDeserialize>.Deserialize(ref D deserializer) { - return deserializer.DeserializeEnumerable, SerdeVisitor>(new SerdeVisitor()); + return deserializer.DeserializeEnumerable(new SerdeVisitor()); } private struct SerdeVisitor : IDeserializeVisitor> { @@ -184,9 +184,7 @@ void ISerialize>.Serialize(ImmutableArray value, ISerialize { static ImmutableArray IDeserialize>.Deserialize(ref D deserializer) { - return deserializer.DeserializeEnumerable< - ImmutableArray, - Visitor>(new Visitor()); + return deserializer.DeserializeEnumerable(new Visitor()); } private struct Visitor : IDeserializeVisitor> diff --git a/src/serde/Wrappers.cs b/src/serde/Wrappers.cs index f53ca847..a5eb6bd1 100644 --- a/src/serde/Wrappers.cs +++ b/src/serde/Wrappers.cs @@ -34,12 +34,13 @@ void Serde.ISerialize.Serialize(ISerializer serializer) } static bool Serde.IDeserialize.Deserialize(ref D deserializer) { - var visitor = new SerdeVisitor(); - return deserializer.DeserializeBool(visitor); + var visitor = SerdeVisitor.Instance; + return deserializer.DeserializeBool(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { + public static readonly SerdeVisitor Instance = new SerdeVisitor(); public string ExpectedTypeName => s_typeName; bool IDeserializeVisitor.VisitBool(bool x) => x; } @@ -58,12 +59,13 @@ void Serde.ISerialize.Serialize(ISerializer serializer) } static char Serde.IDeserialize.Deserialize(ref D deserializer) { - var visitor = new SerdeVisitor(); - return deserializer.DeserializeChar(visitor); + var visitor = SerdeVisitor.Instance; + return deserializer.DeserializeChar(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { + public static readonly SerdeVisitor Instance = new SerdeVisitor(); public string ExpectedTypeName => s_typeName; char IDeserializeVisitor.VisitChar(char c) => c; char IDeserializeVisitor.VisitString(string s) => GetChar(s); @@ -97,12 +99,13 @@ public void Serialize(byte value, ISerializer serializer) } static byte Serde.IDeserialize.Deserialize(ref D deserializer) { - var visitor = new SerdeVisitor(); - return deserializer.DeserializeByte(visitor); + var visitor = SerdeVisitor.Instance; + return deserializer.DeserializeByte(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { + public static readonly SerdeVisitor Instance = new SerdeVisitor(); public string ExpectedTypeName => ByteWrap.s_typeName; byte IDeserializeVisitor.VisitByte(byte b) => b; byte IDeserializeVisitor.VisitU16(ushort u16) => Convert.ToByte(u16); @@ -130,12 +133,13 @@ void Serde.ISerialize.Serialize(ISerializer serializer) } static ushort Serde.IDeserialize.Deserialize(ref D deserializer) { - var visitor = new SerdeVisitor(); - return deserializer.DeserializeU16(visitor); + var visitor = SerdeVisitor.Instance; + return deserializer.DeserializeU16(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { + public static readonly SerdeVisitor Instance = new SerdeVisitor(); public string ExpectedTypeName => s_typeName; ushort IDeserializeVisitor.VisitByte(byte b) => b; ushort IDeserializeVisitor.VisitU16(ushort u16) => u16; @@ -161,12 +165,13 @@ void Serde.ISerialize.Serialize(ISerializer serializer) } static uint Serde.IDeserialize.Deserialize(ref D deserializer) { - var visitor = new SerdeVisitor(); - return deserializer.DeserializeU32(visitor); + var visitor = SerdeVisitor.Instance; + return deserializer.DeserializeU32(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { + public static readonly SerdeVisitor Instance = new SerdeVisitor(); public string ExpectedTypeName => s_typeName; uint IDeserializeVisitor.VisitByte(byte b) => b; uint IDeserializeVisitor.VisitU16(ushort u16) => u16; @@ -192,12 +197,13 @@ void Serde.ISerialize.Serialize(ISerializer serializer) } static ulong Serde.IDeserialize.Deserialize(ref D deserializer) { - var visitor = new SerdeVisitor(); - return deserializer.DeserializeU64(visitor); + var visitor = SerdeVisitor.Instance; + return deserializer.DeserializeU64(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { + public static readonly SerdeVisitor Instance = new SerdeVisitor(); public string ExpectedTypeName => s_typeName; ulong IDeserializeVisitor.VisitByte(byte b) => b; ulong IDeserializeVisitor.VisitU16(ushort u16) => u16; @@ -223,12 +229,13 @@ void Serde.ISerialize.Serialize(ISerializer serializer) } static sbyte Serde.IDeserialize.Deserialize(ref D deserializer) { - var visitor = new SerdeVisitor(); - return deserializer.DeserializeSByte(visitor); + var visitor = SerdeVisitor.Instance; + return deserializer.DeserializeSByte(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { + public static readonly SerdeVisitor Instance = new SerdeVisitor(); public string ExpectedTypeName => s_typeName; sbyte IDeserializeVisitor.VisitByte(byte b) => Convert.ToSByte(b); sbyte IDeserializeVisitor.VisitU16(ushort u16) => Convert.ToSByte(u16); @@ -256,12 +263,13 @@ void Serde.ISerialize.Serialize(ISerializer serializer) } static short Serde.IDeserialize.Deserialize(ref D deserializer) { - var visitor = new SerdeVisitor(); - return deserializer.DeserializeI16(visitor); + var visitor = SerdeVisitor.Instance; + return deserializer.DeserializeI16(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { + public static readonly SerdeVisitor Instance = new SerdeVisitor(); public string ExpectedTypeName => s_typeName; short IDeserializeVisitor.VisitByte(byte b) => b; short IDeserializeVisitor.VisitU16(ushort u16) => Convert.ToInt16(u16); @@ -289,12 +297,13 @@ void ISerialize.Serialize(int value, ISerializer serializer) } static int Serde.IDeserialize.Deserialize(ref D deserializer) { - var visitor = new SerdeVisitor(); - return deserializer.DeserializeI32(visitor); + var visitor = SerdeVisitor.Instance; + return deserializer.DeserializeI32(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { + public static readonly SerdeVisitor Instance = new SerdeVisitor(); public string ExpectedTypeName => s_typeName; int IDeserializeVisitor.VisitByte(byte b) => b; int IDeserializeVisitor.VisitU16(ushort u16) => u16; @@ -320,12 +329,13 @@ void Serde.ISerialize.Serialize(ISerializer serializer) } static long Serde.IDeserialize.Deserialize(ref D deserializer) { - var visitor = new SerdeVisitor(); - return deserializer.DeserializeI64(visitor); + var visitor = SerdeVisitor.Instance; + return deserializer.DeserializeI64(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { + public static readonly SerdeVisitor Instance = new SerdeVisitor(); public string ExpectedTypeName => s_typeName; long IDeserializeVisitor.VisitByte(byte b) => b; long IDeserializeVisitor.VisitU16(ushort u16) => u16; @@ -352,12 +362,13 @@ void ISerialize.Serialize(double value, ISerializer serializer) } static double Serde.IDeserialize.Deserialize(ref D deserializer) { - var visitor = new SerdeVisitor(); - return deserializer.DeserializeDouble(visitor); + var visitor = SerdeVisitor.Instance; + return deserializer.DeserializeDouble(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { + public static readonly SerdeVisitor Instance = new SerdeVisitor(); public string ExpectedTypeName => "double"; double IDeserializeVisitor.VisitByte(byte b) => b; double IDeserializeVisitor.VisitU16(ushort u16) => u16; @@ -386,12 +397,13 @@ void Serde.ISerialize.Serialize(decimal value, ISerializer serializer) } static decimal Serde.IDeserialize.Deserialize(ref D deserializer) { - var visitor = new SerdeVisitor(); - return deserializer.DeserializeDecimal(visitor); + var visitor = SerdeVisitor.Instance; + return deserializer.DeserializeDecimal(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { + public static readonly SerdeVisitor Instance = new SerdeVisitor(); public string ExpectedTypeName => "decimal"; decimal IDeserializeVisitor.VisitByte(byte b) => b; decimal IDeserializeVisitor.VisitU16(ushort u16) => u16; @@ -422,11 +434,12 @@ void ISerialize.Serialize(string value, ISerializer serializer) public static string Deserialize(ref D deserializer) where D : IDeserializer { - return deserializer.DeserializeString(new SerdeVisitor()); + return deserializer.DeserializeString(SerdeVisitor.Instance); } - private class SerdeVisitor : IDeserializeVisitor + private sealed class SerdeVisitor : IDeserializeVisitor { + public static readonly SerdeVisitor Instance = new SerdeVisitor(); public string ExpectedTypeName => s_typeName; public string VisitString(string s) => s; string IDeserializeVisitor.VisitChar(char c) => c.ToString(); @@ -474,7 +487,7 @@ public readonly partial record struct DeserializeImpl(T? Value) { public static T? Deserialize(ref D deserializer) where D : IDeserializer { - return deserializer.DeserializeNullableRef(new Visitor()); + return deserializer.DeserializeNullableRef(new Visitor()); } private sealed class Visitor : IDeserializeVisitor @@ -534,7 +547,7 @@ public readonly partial record struct DeserializeImpl(T? Value) { public static T? Deserialize(ref D deserializer) where D : IDeserializer { - return deserializer.DeserializeNullableRef(new Visitor()); + return deserializer.DeserializeNullableRef(new Visitor()); } private struct Visitor : IDeserializeVisitor diff --git a/src/serde/json/JsonDeserializer.cs b/src/serde/json/JsonDeserializer.cs index 24f56237..5d0f135f 100644 --- a/src/serde/json/JsonDeserializer.cs +++ b/src/serde/json/JsonDeserializer.cs @@ -40,7 +40,7 @@ private ref Utf8JsonReader GetReader() return ref _state.Reader; } - public T DeserializeAny(V v) where V : IDeserializeVisitor + public T DeserializeAny(IDeserializeVisitor v) { var reader = GetReader(); reader.ReadOrThrow(); @@ -48,24 +48,24 @@ public T DeserializeAny(V v) where V : IDeserializeVisitor switch (reader.TokenType) { case JsonTokenType.StartArray: - result = DeserializeEnumerable(v); + result = DeserializeEnumerable(v); break; case JsonTokenType.Number: - result = DeserializeDouble(v); + result = DeserializeDouble(v); break; case JsonTokenType.StartObject: - result = DeserializeDictionary(v); + result = DeserializeDictionary(v); break; case JsonTokenType.String: - result = DeserializeString(v); + result = DeserializeString(v); break; case JsonTokenType.True: case JsonTokenType.False: - result = DeserializeBool(v); + result = DeserializeBool(v); break; default: @@ -74,7 +74,7 @@ public T DeserializeAny(V v) where V : IDeserializeVisitor return result; } - public T DeserializeBool(V v) where V : IDeserializeVisitor + public T DeserializeBool(IDeserializeVisitor v) { ref var reader = ref GetReader(); reader.ReadOrThrow(); @@ -82,7 +82,7 @@ public T DeserializeBool(V v) where V : IDeserializeVisitor return v.VisitBool(b); } - public T DeserializeDictionary(V v) where V : IDeserializeVisitor + public T DeserializeDictionary(IDeserializeVisitor v) { ref var reader = ref GetReader(); reader.ReadOrThrow(); @@ -96,10 +96,10 @@ public T DeserializeDictionary(V v) where V : IDeserializeVisitor return v.VisitDictionary(ref map); } - public T DeserializeFloat(V v) where V : IDeserializeVisitor - => DeserializeDouble(v); + public T DeserializeFloat(IDeserializeVisitor v) + => DeserializeDouble(v); - public T DeserializeDouble(V v) where V : IDeserializeVisitor + public T DeserializeDouble(IDeserializeVisitor v) { ref var reader = ref GetReader(); reader.ReadOrThrow(); @@ -107,7 +107,7 @@ public T DeserializeDouble(V v) where V : IDeserializeVisitor return v.VisitDouble(d); } - public T DeserializeDecimal(V v) where V : IDeserializeVisitor + public T DeserializeDecimal(IDeserializeVisitor v) { ref var reader = ref GetReader(); reader.ReadOrThrow(); @@ -115,7 +115,7 @@ public T DeserializeDecimal(V v) where V : IDeserializeVisitor return v.VisitDecimal(d); } - public T DeserializeEnumerable(V v) where V : IDeserializeVisitor + public T DeserializeEnumerable(IDeserializeVisitor v) { ref var reader = ref GetReader(); reader.ReadOrThrow(); @@ -215,17 +215,17 @@ public V GetNextValue() where D : IDeserialize } } - public T DeserializeSByte(V v) where V : IDeserializeVisitor - => DeserializeI64(v); + public T DeserializeSByte(IDeserializeVisitor v) + => DeserializeI64(v); - public T DeserializeI16(V v) where V : IDeserializeVisitor - => DeserializeI64(v); + public T DeserializeI16(IDeserializeVisitor v) + => DeserializeI64(v); - public T DeserializeI32(V v) where V : IDeserializeVisitor - => DeserializeI64(v); + public T DeserializeI32(IDeserializeVisitor v) + => DeserializeI64(v); - public T DeserializeI64(V v) where V : IDeserializeVisitor + public T DeserializeI64(IDeserializeVisitor v) { ref var reader = ref GetReader(); reader.ReadOrThrow(); @@ -233,7 +233,7 @@ public T DeserializeI64(V v) where V : IDeserializeVisitor return v.VisitI64(i64); } - public T DeserializeString(V v) where V : IDeserializeVisitor + public T DeserializeString(IDeserializeVisitor v) { ref var reader = ref GetReader(); reader.ReadOrThrow(); @@ -249,25 +249,25 @@ public T DeserializeString(V v) where V : IDeserializeVisitor } } - public T DeserializeIdentifier(V v) where V : IDeserializeVisitor - => DeserializeString(v); + public T DeserializeIdentifier(IDeserializeVisitor v) + => DeserializeString(v); - public T DeserializeType(string typeName, ReadOnlySpan fieldNames, V v) where V : IDeserializeVisitor + public T DeserializeType(string typeName, ReadOnlySpan fieldNames, IDeserializeVisitor v) { // Types are identical to dictionaries - return DeserializeDictionary(v); + return DeserializeDictionary(v); } - public T DeserializeByte(V v) where V : IDeserializeVisitor - => DeserializeU64(v); + public T DeserializeByte(IDeserializeVisitor v) + => DeserializeU64(v); - public T DeserializeU16(V v) where V : IDeserializeVisitor - => DeserializeU64(v); + public T DeserializeU16(IDeserializeVisitor v) + => DeserializeU64(v); - public T DeserializeU32(V v) where V : IDeserializeVisitor - => DeserializeU64(v); + public T DeserializeU32(IDeserializeVisitor v) + => DeserializeU64(v); - public T DeserializeU64(V v) where V : IDeserializeVisitor + public T DeserializeU64(IDeserializeVisitor v) { ref var reader = ref GetReader(); reader.ReadOrThrow(); @@ -275,11 +275,10 @@ public T DeserializeU64(V v) where V : IDeserializeVisitor return v.VisitU64(u64); } - public T DeserializeChar(V v) where V : IDeserializeVisitor - => DeserializeString(v); + public T DeserializeChar(IDeserializeVisitor v) + => DeserializeString(v); - public T DeserializeNullableRef(V v) - where V : IDeserializeVisitor + public T DeserializeNullableRef(IDeserializeVisitor v) { var reader = GetReader(); reader.ReadOrThrow(); diff --git a/src/serde/json/JsonValue.Deserialize.cs b/src/serde/json/JsonValue.Deserialize.cs index 1c753a22..58204114 100644 --- a/src/serde/json/JsonValue.Deserialize.cs +++ b/src/serde/json/JsonValue.Deserialize.cs @@ -9,7 +9,7 @@ partial record JsonValue : IDeserialize { static JsonValue IDeserialize.Deserialize(ref D deserializer) { - return deserializer.DeserializeAny(Visitor.Instance); + return deserializer.DeserializeAny(Visitor.Instance); } private sealed class Visitor : IDeserializeVisitor diff --git a/test/Serde.Generation.Test/test_output/AllInOneTest.GeneratorTest/Serde.Test.AllInOne.ColorEnumWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/AllInOneTest.GeneratorTest/Serde.Test.AllInOne.ColorEnumWrap.IDeserialize.verified.cs index f02a3aad..bd311273 100644 --- a/test/Serde.Generation.Test/test_output/AllInOneTest.GeneratorTest/Serde.Test.AllInOne.ColorEnumWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/AllInOneTest.GeneratorTest/Serde.Test.AllInOne.ColorEnumWrap.IDeserialize.verified.cs @@ -13,7 +13,7 @@ partial record struct ColorEnumWrap : Serde.IDeserialize.Deserialize(ref D deserializer) { var visitor = new SerdeVisitor(); - return deserializer.DeserializeString(visitor); + return deserializer.DeserializeString(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor diff --git a/test/Serde.Generation.Test/test_output/AllInOneTest.GeneratorTest/Serde.Test.AllInOne.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/AllInOneTest.GeneratorTest/Serde.Test.AllInOne.IDeserialize.verified.cs index 22b11d35..305b357c 100644 --- a/test/Serde.Generation.Test/test_output/AllInOneTest.GeneratorTest/Serde.Test.AllInOne.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/AllInOneTest.GeneratorTest/Serde.Test.AllInOne.IDeserialize.verified.cs @@ -30,17 +30,18 @@ partial record AllInOne : Serde.IDeserialize "IntImm", "Color" }; - return deserializer.DeserializeType("AllInOne", fieldNames, visitor); + return deserializer.DeserializeType("AllInOne", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Serde.Test.AllInOne"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/C.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/C.IDeserialize.verified.cs index 16dd7dc8..eeea895e 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/C.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/C.IDeserialize.verified.cs @@ -16,17 +16,18 @@ static C Serde.IDeserialize.Deserialize(ref D deserializer) "ColorLong", "ColorULong" }; - return deserializer.DeserializeType("C", fieldNames, visitor); + return deserializer.DeserializeType("C", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "C"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorByteWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorByteWrap.IDeserialize.verified.cs index 60432c35..bd52ca15 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorByteWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorByteWrap.IDeserialize.verified.cs @@ -9,7 +9,7 @@ partial record struct ColorByteWrap : Serde.IDeserialize static ColorByte Serde.IDeserialize.Deserialize(ref D deserializer) { var visitor = new SerdeVisitor(); - return deserializer.DeserializeString(visitor); + return deserializer.DeserializeString(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorIntWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorIntWrap.IDeserialize.verified.cs index 3603b262..0ecd205e 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorIntWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorIntWrap.IDeserialize.verified.cs @@ -9,7 +9,7 @@ partial record struct ColorIntWrap : Serde.IDeserialize static ColorInt Serde.IDeserialize.Deserialize(ref D deserializer) { var visitor = new SerdeVisitor(); - return deserializer.DeserializeString(visitor); + return deserializer.DeserializeString(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorLongWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorLongWrap.IDeserialize.verified.cs index b507b953..fff68877 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorLongWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorLongWrap.IDeserialize.verified.cs @@ -9,7 +9,7 @@ partial record struct ColorLongWrap : Serde.IDeserialize static ColorLong Serde.IDeserialize.Deserialize(ref D deserializer) { var visitor = new SerdeVisitor(); - return deserializer.DeserializeString(visitor); + return deserializer.DeserializeString(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorULongWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorULongWrap.IDeserialize.verified.cs index 17395957..10fca6f4 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorULongWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests.EnumMember/ColorULongWrap.IDeserialize.verified.cs @@ -9,7 +9,7 @@ partial record struct ColorULongWrap : Serde.IDeserialize static ColorULong Serde.IDeserialize.Deserialize(ref D deserializer) { var visitor = new SerdeVisitor(); - return deserializer.DeserializeString(visitor); + return deserializer.DeserializeString(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests.NestedExplicitDeserializeWrapper/OptsWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests.NestedExplicitDeserializeWrapper/OptsWrap.IDeserialize.verified.cs index c266128b..2c73a2ad 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests.NestedExplicitDeserializeWrapper/OptsWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests.NestedExplicitDeserializeWrapper/OptsWrap.IDeserialize.verified.cs @@ -16,17 +16,18 @@ partial record struct OptsWrap : Serde.IDeserialize("BIND_OPTS", fieldNames, visitor); + return deserializer.DeserializeType("BIND_OPTS", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "System.Runtime.InteropServices.ComTypes.BIND_OPTS"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests.NestedExplicitDeserializeWrapper/S.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests.NestedExplicitDeserializeWrapper/S.IDeserialize.verified.cs index 87ac0423..b71623b8 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests.NestedExplicitDeserializeWrapper/S.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests.NestedExplicitDeserializeWrapper/S.IDeserialize.verified.cs @@ -13,17 +13,18 @@ static S Serde.IDeserialize.Deserialize(ref D deserializer) { "Opts" }; - return deserializer.DeserializeType("S", fieldNames, visitor); + return deserializer.DeserializeType("S", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "S"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests/Array#ArrayField.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests/Array#ArrayField.IDeserialize.verified.cs index f2f42cbc..dbcc1e8b 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests/Array#ArrayField.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests/Array#ArrayField.IDeserialize.verified.cs @@ -13,17 +13,18 @@ static ArrayField Serde.IDeserialize.Deserialize(ref D deserializ { "IntArr" }; - return deserializer.DeserializeType("ArrayField", fieldNames, visitor); + return deserializer.DeserializeType("ArrayField", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "ArrayField"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests/DeserializeMissing#SetToNull.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests/DeserializeMissing#SetToNull.IDeserialize.verified.cs index 300538ae..01ca4818 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests/DeserializeMissing#SetToNull.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests/DeserializeMissing#SetToNull.IDeserialize.verified.cs @@ -15,17 +15,18 @@ static SetToNull Serde.IDeserialize.Deserialize(ref D deserializer "Missing", "ThrowMissing" }; - return deserializer.DeserializeType("SetToNull", fieldNames, visitor); + return deserializer.DeserializeType("SetToNull", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "SetToNull"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests/DeserializeOnlyWrap#Wrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests/DeserializeOnlyWrap#Wrap.IDeserialize.verified.cs index eff3556c..8824e7ee 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests/DeserializeOnlyWrap#Wrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests/DeserializeOnlyWrap#Wrap.IDeserialize.verified.cs @@ -16,17 +16,18 @@ partial record struct Wrap : Serde.IDeserialize("BIND_OPTS", fieldNames, visitor); + return deserializer.DeserializeType("BIND_OPTS", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "System.Runtime.InteropServices.ComTypes.BIND_OPTS"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests/MemberSkip#Rgb.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests/MemberSkip#Rgb.IDeserialize.verified.cs index 06b0fb71..f9bb3c29 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests/MemberSkip#Rgb.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests/MemberSkip#Rgb.IDeserialize.verified.cs @@ -14,17 +14,18 @@ static Rgb Serde.IDeserialize.Deserialize(ref D deserializer) "Red", "Blue" }; - return deserializer.DeserializeType("Rgb", fieldNames, visitor); + return deserializer.DeserializeType("Rgb", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Rgb"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests/MemberSkipDeserialize#Rgb.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests/MemberSkipDeserialize#Rgb.IDeserialize.verified.cs index 3411c859..4e5167b0 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests/MemberSkipDeserialize#Rgb.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests/MemberSkipDeserialize#Rgb.IDeserialize.verified.cs @@ -15,17 +15,18 @@ static Rgb Serde.IDeserialize.Deserialize(ref D deserializer) "Green", "Blue" }; - return deserializer.DeserializeType("Rgb", fieldNames, visitor); + return deserializer.DeserializeType("Rgb", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Rgb"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests/MemberSkipSerialize#Rgb.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests/MemberSkipSerialize#Rgb.IDeserialize.verified.cs index 06b0fb71..f9bb3c29 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests/MemberSkipSerialize#Rgb.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests/MemberSkipSerialize#Rgb.IDeserialize.verified.cs @@ -14,17 +14,18 @@ static Rgb Serde.IDeserialize.Deserialize(ref D deserializer) "Red", "Blue" }; - return deserializer.DeserializeType("Rgb", fieldNames, visitor); + return deserializer.DeserializeType("Rgb", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Rgb"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests/NestedPartialClasses#A.B.C.D.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests/NestedPartialClasses#A.B.C.D.IDeserialize.verified.cs index f260b950..dc0944c3 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests/NestedPartialClasses#A.B.C.D.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests/NestedPartialClasses#A.B.C.D.IDeserialize.verified.cs @@ -19,17 +19,18 @@ partial class D : Serde.IDeserialize { "Field" }; - return deserializer.DeserializeType("D", fieldNames, visitor); + return deserializer.DeserializeType("D", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "A.B.C.D"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests/NullableRefField#S.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests/NullableRefField#S.IDeserialize.verified.cs index 68cd5457..d21388ed 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests/NullableRefField#S.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests/NullableRefField#S.IDeserialize.verified.cs @@ -13,17 +13,18 @@ static S Serde.IDeserialize.Deserialize(ref D deserializer) { "F" }; - return deserializer.DeserializeType("S", fieldNames, visitor); + return deserializer.DeserializeType("S", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "S"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/DeserializeTests/Rgb#Rgb.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/DeserializeTests/Rgb#Rgb.IDeserialize.verified.cs index 3411c859..4e5167b0 100644 --- a/test/Serde.Generation.Test/test_output/DeserializeTests/Rgb#Rgb.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/DeserializeTests/Rgb#Rgb.IDeserialize.verified.cs @@ -15,17 +15,18 @@ static Rgb Serde.IDeserialize.Deserialize(ref D deserializer) "Green", "Blue" }; - return deserializer.DeserializeType("Rgb", fieldNames, visitor); + return deserializer.DeserializeType("Rgb", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Rgb"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumFormat/ColorEnumWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumFormat/ColorEnumWrap.IDeserialize.verified.cs index 6fcfc576..0955dff0 100644 --- a/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumFormat/ColorEnumWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumFormat/ColorEnumWrap.IDeserialize.verified.cs @@ -9,7 +9,7 @@ partial record struct ColorEnumWrap : Serde.IDeserialize static ColorEnum Serde.IDeserialize.Deserialize(ref D deserializer) { var visitor = new SerdeVisitor(); - return deserializer.DeserializeString(visitor); + return deserializer.DeserializeString(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor diff --git a/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumValues/ColorEnumWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumValues/ColorEnumWrap.IDeserialize.verified.cs index 9f1ac003..9d28fdd2 100644 --- a/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumValues/ColorEnumWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumValues/ColorEnumWrap.IDeserialize.verified.cs @@ -9,7 +9,7 @@ partial record struct ColorEnumWrap : Serde.IDeserialize static ColorEnum Serde.IDeserialize.Deserialize(ref D deserializer) { var visitor = new SerdeVisitor(); - return deserializer.DeserializeString(visitor); + return deserializer.DeserializeString(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor diff --git a/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumValues/S.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumValues/S.IDeserialize.verified.cs index c50ee1d2..7c33a30e 100644 --- a/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumValues/S.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumValues/S.IDeserialize.verified.cs @@ -13,17 +13,18 @@ static S Serde.IDeserialize.Deserialize(ref D deserializer) { "E" }; - return deserializer.DeserializeType("S", fieldNames, visitor); + return deserializer.DeserializeType("S", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "S"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumValues/S2.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumValues/S2.IDeserialize.verified.cs index 4ec7e735..404b467b 100644 --- a/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumValues/S2.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/MemberFormatTests.EnumValues/S2.IDeserialize.verified.cs @@ -13,17 +13,18 @@ static S2 Serde.IDeserialize.Deserialize(ref D deserializer) { "E" }; - return deserializer.DeserializeType("S2", fieldNames, visitor); + return deserializer.DeserializeType("S2", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "S2"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/MemberFormatTests.KebabCase/S.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/MemberFormatTests.KebabCase/S.IDeserialize.verified.cs index 853b7746..8bb08db3 100644 --- a/test/Serde.Generation.Test/test_output/MemberFormatTests.KebabCase/S.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/MemberFormatTests.KebabCase/S.IDeserialize.verified.cs @@ -14,17 +14,18 @@ static S Serde.IDeserialize.Deserialize(ref D deserializer) "One", "TwoWord" }; - return deserializer.DeserializeType("S", fieldNames, visitor); + return deserializer.DeserializeType("S", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "S"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/SerializeTests.NestedExplicitSerializeWrapper/OPTSWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/SerializeTests.NestedExplicitSerializeWrapper/OPTSWrap.IDeserialize.verified.cs index 09fbbc09..2da7bb29 100644 --- a/test/Serde.Generation.Test/test_output/SerializeTests.NestedExplicitSerializeWrapper/OPTSWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/SerializeTests.NestedExplicitSerializeWrapper/OPTSWrap.IDeserialize.verified.cs @@ -16,17 +16,18 @@ partial record struct OPTSWrap : Serde.IDeserialize("BIND_OPTS", fieldNames, visitor); + return deserializer.DeserializeType("BIND_OPTS", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "System.Runtime.InteropServices.ComTypes.BIND_OPTS"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/SerializeTests.NestedExplicitSerializeWrapper/S.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/SerializeTests.NestedExplicitSerializeWrapper/S.IDeserialize.verified.cs index 2e750c82..51f03d12 100644 --- a/test/Serde.Generation.Test/test_output/SerializeTests.NestedExplicitSerializeWrapper/S.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/SerializeTests.NestedExplicitSerializeWrapper/S.IDeserialize.verified.cs @@ -13,17 +13,18 @@ static S Serde.IDeserialize.Deserialize(ref D deserializer) { "Opts" }; - return deserializer.DeserializeType("S", fieldNames, visitor); + return deserializer.DeserializeType("S", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "S"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/WrapperTests.GenerateSerdeWrap/OPTSWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/WrapperTests.GenerateSerdeWrap/OPTSWrap.IDeserialize.verified.cs index 09fbbc09..2da7bb29 100644 --- a/test/Serde.Generation.Test/test_output/WrapperTests.GenerateSerdeWrap/OPTSWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/WrapperTests.GenerateSerdeWrap/OPTSWrap.IDeserialize.verified.cs @@ -16,17 +16,18 @@ partial record struct OPTSWrap : Serde.IDeserialize("BIND_OPTS", fieldNames, visitor); + return deserializer.DeserializeType("BIND_OPTS", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "System.Runtime.InteropServices.ComTypes.BIND_OPTS"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/WrapperTests.ImmutableArrayEnumDeserialize/Test.ChannelList.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/WrapperTests.ImmutableArrayEnumDeserialize/Test.ChannelList.IDeserialize.verified.cs index aced467d..b7599831 100644 --- a/test/Serde.Generation.Test/test_output/WrapperTests.ImmutableArrayEnumDeserialize/Test.ChannelList.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/WrapperTests.ImmutableArrayEnumDeserialize/Test.ChannelList.IDeserialize.verified.cs @@ -15,17 +15,18 @@ partial record struct ChannelList : Serde.IDeserialize { "Channels" }; - return deserializer.DeserializeType("ChannelList", fieldNames, visitor); + return deserializer.DeserializeType("ChannelList", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Test.ChannelList"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/WrapperTests.ImmutableArrayEnumDeserialize/Test.ChannelWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/WrapperTests.ImmutableArrayEnumDeserialize/Test.ChannelWrap.IDeserialize.verified.cs index 4ee09a5c..dfd5dc91 100644 --- a/test/Serde.Generation.Test/test_output/WrapperTests.ImmutableArrayEnumDeserialize/Test.ChannelWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/WrapperTests.ImmutableArrayEnumDeserialize/Test.ChannelWrap.IDeserialize.verified.cs @@ -11,7 +11,7 @@ partial record struct ChannelWrap : Serde.IDeserialize static Test.Channel Serde.IDeserialize.Deserialize(ref D deserializer) { var visitor = new SerdeVisitor(); - return deserializer.DeserializeString(visitor); + return deserializer.DeserializeString(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor diff --git a/test/Serde.Generation.Test/test_output/WrapperTests.NestedDeserializeWrap/C.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/WrapperTests.NestedDeserializeWrap/C.IDeserialize.verified.cs index 7294bd09..64ce25e9 100644 --- a/test/Serde.Generation.Test/test_output/WrapperTests.NestedDeserializeWrap/C.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/WrapperTests.NestedDeserializeWrap/C.IDeserialize.verified.cs @@ -13,17 +13,18 @@ static C Serde.IDeserialize.Deserialize(ref D deserializer) { "S" }; - return deserializer.DeserializeType("C", fieldNames, visitor); + return deserializer.DeserializeType("C", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "C"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/WrapperTests.NestedDeserializeWrap/OPTSWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/WrapperTests.NestedDeserializeWrap/OPTSWrap.IDeserialize.verified.cs index 09fbbc09..2da7bb29 100644 --- a/test/Serde.Generation.Test/test_output/WrapperTests.NestedDeserializeWrap/OPTSWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/WrapperTests.NestedDeserializeWrap/OPTSWrap.IDeserialize.verified.cs @@ -16,17 +16,18 @@ partial record struct OPTSWrap : Serde.IDeserialize("BIND_OPTS", fieldNames, visitor); + return deserializer.DeserializeType("BIND_OPTS", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "System.Runtime.InteropServices.ComTypes.BIND_OPTS"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/WrapperTests.PointWrap/PointWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/WrapperTests.PointWrap/PointWrap.IDeserialize.verified.cs index d75c05d0..7c9a5c3f 100644 --- a/test/Serde.Generation.Test/test_output/WrapperTests.PointWrap/PointWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/WrapperTests.PointWrap/PointWrap.IDeserialize.verified.cs @@ -14,17 +14,18 @@ static Point Serde.IDeserialize.Deserialize(ref D deserializer) "X", "Y" }; - return deserializer.DeserializeType("Point", fieldNames, visitor); + return deserializer.DeserializeType("Point", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Point"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/WrapperTests.PositionalRecordDeserialize/R.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/WrapperTests.PositionalRecordDeserialize/R.IDeserialize.verified.cs index 02e647f6..103536d4 100644 --- a/test/Serde.Generation.Test/test_output/WrapperTests.PositionalRecordDeserialize/R.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/WrapperTests.PositionalRecordDeserialize/R.IDeserialize.verified.cs @@ -14,17 +14,18 @@ static R Serde.IDeserialize.Deserialize(ref D deserializer) "A", "B" }; - return deserializer.DeserializeType("R", fieldNames, visitor); + return deserializer.DeserializeType("R", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "R"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/WrapperTests.RecursiveType/Test.Parent.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/WrapperTests.RecursiveType/Test.Parent.IDeserialize.verified.cs index 9a095309..addc8045 100644 --- a/test/Serde.Generation.Test/test_output/WrapperTests.RecursiveType/Test.Parent.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/WrapperTests.RecursiveType/Test.Parent.IDeserialize.verified.cs @@ -15,17 +15,18 @@ partial record Parent : Serde.IDeserialize { "R" }; - return deserializer.DeserializeType("Parent", fieldNames, visitor); + return deserializer.DeserializeType("Parent", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Test.Parent"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Generation.Test/test_output/WrapperTests.RecursiveType/Test.RecursiveWrap.IDeserialize.verified.cs b/test/Serde.Generation.Test/test_output/WrapperTests.RecursiveType/Test.RecursiveWrap.IDeserialize.verified.cs index b3142157..28b8479b 100644 --- a/test/Serde.Generation.Test/test_output/WrapperTests.RecursiveType/Test.RecursiveWrap.IDeserialize.verified.cs +++ b/test/Serde.Generation.Test/test_output/WrapperTests.RecursiveType/Test.RecursiveWrap.IDeserialize.verified.cs @@ -15,17 +15,18 @@ static Recursive Serde.IDeserialize.Deserialize(ref D deserializer { "Next" }; - return deserializer.DeserializeType("Recursive", fieldNames, visitor); + return deserializer.DeserializeType("Recursive", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Recursive"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); diff --git a/test/Serde.Test/GenericWrapperTests.cs b/test/Serde.Test/GenericWrapperTests.cs index 4034c071..75f148c1 100644 --- a/test/Serde.Test/GenericWrapperTests.cs +++ b/test/Serde.Test/GenericWrapperTests.cs @@ -109,7 +109,7 @@ void ISerialize.Serialize(ISerializer serializer) where TWrap : IDeserialize { public static CustomImArray Deserialize(ref D deserializer) where D : IDeserializer - => deserializer.DeserializeEnumerable, Visitor>(new Visitor()); + => deserializer.DeserializeEnumerable(new Visitor()); public struct Visitor : IDeserializeVisitor> { @@ -158,7 +158,7 @@ void ISerialize.Serialize(ISerializer serializer) where TWrap : IDeserialize { public static CustomImArray2 Deserialize(ref D deserializer) where D : IDeserializer - => deserializer.DeserializeEnumerable, Visitor>(new Visitor()); + => deserializer.DeserializeEnumerable(new Visitor()); public struct Visitor : IDeserializeVisitor> { diff --git a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.ColorEnumWrap.IDeserialize.cs b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.ColorEnumWrap.IDeserialize.cs index 98724277..8f187592 100644 --- a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.ColorEnumWrap.IDeserialize.cs +++ b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.ColorEnumWrap.IDeserialize.cs @@ -12,7 +12,7 @@ partial record struct ColorEnumWrap : Serde.IDeserialize.Deserialize(ref D deserializer) { var visitor = new SerdeVisitor(); - return deserializer.DeserializeString(visitor); + return deserializer.DeserializeString(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor diff --git a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.IDeserialize.cs b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.IDeserialize.cs index 3c91c714..a704df39 100644 --- a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.IDeserialize.cs +++ b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.IDeserialize.cs @@ -29,17 +29,18 @@ partial record AllInOne : Serde.IDeserialize "IntImm", "Color" }; - return deserializer.DeserializeType("AllInOne", fieldNames, visitor); + return deserializer.DeserializeType("AllInOne", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Serde.Test.AllInOne"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); @@ -47,37 +48,37 @@ public byte VisitUtf8Span(System.ReadOnlySpan s) { switch (s[0]) { - case (byte)'b'when s.SequenceEqual("boolField"u8): + case (byte)'b' when s.SequenceEqual("boolField"u8): return 1; - case (byte)'c'when s.SequenceEqual("charField"u8): + case (byte)'c' when s.SequenceEqual("charField"u8): return 2; - case (byte)'b'when s.SequenceEqual("byteField"u8): + case (byte)'b' when s.SequenceEqual("byteField"u8): return 3; - case (byte)'u'when s.SequenceEqual("uShortField"u8): + case (byte)'u' when s.SequenceEqual("uShortField"u8): return 4; - case (byte)'u'when s.SequenceEqual("uIntField"u8): + case (byte)'u' when s.SequenceEqual("uIntField"u8): return 5; - case (byte)'u'when s.SequenceEqual("uLongField"u8): + case (byte)'u' when s.SequenceEqual("uLongField"u8): return 6; - case (byte)'s'when s.SequenceEqual("sByteField"u8): + case (byte)'s' when s.SequenceEqual("sByteField"u8): return 7; - case (byte)'s'when s.SequenceEqual("shortField"u8): + case (byte)'s' when s.SequenceEqual("shortField"u8): return 8; - case (byte)'i'when s.SequenceEqual("intField"u8): + case (byte)'i' when s.SequenceEqual("intField"u8): return 9; - case (byte)'l'when s.SequenceEqual("longField"u8): + case (byte)'l' when s.SequenceEqual("longField"u8): return 10; - case (byte)'s'when s.SequenceEqual("stringField"u8): + case (byte)'s' when s.SequenceEqual("stringField"u8): return 11; - case (byte)'n'when s.SequenceEqual("nullStringField"u8): + case (byte)'n' when s.SequenceEqual("nullStringField"u8): return 12; - case (byte)'u'when s.SequenceEqual("uIntArr"u8): + case (byte)'u' when s.SequenceEqual("uIntArr"u8): return 13; - case (byte)'n'when s.SequenceEqual("nestedArr"u8): + case (byte)'n' when s.SequenceEqual("nestedArr"u8): return 14; - case (byte)'i'when s.SequenceEqual("intImm"u8): + case (byte)'i' when s.SequenceEqual("intImm"u8): return 15; - case (byte)'c'when s.SequenceEqual("color"u8): + case (byte)'c' when s.SequenceEqual("color"u8): return 16; default: return 0; diff --git a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.GenericWrapperTests.CustomArrayWrapExplicitOnType.IDeserialize.cs b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.GenericWrapperTests.CustomArrayWrapExplicitOnType.IDeserialize.cs index c6dcd96e..a3bd59ba 100644 --- a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.GenericWrapperTests.CustomArrayWrapExplicitOnType.IDeserialize.cs +++ b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.GenericWrapperTests.CustomArrayWrapExplicitOnType.IDeserialize.cs @@ -16,17 +16,18 @@ partial record struct CustomArrayWrapExplicitOnType : Serde.IDeserialize("CustomArrayWrapExplicitOnType", fieldNames, visitor); + return deserializer.DeserializeType("CustomArrayWrapExplicitOnType", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Serde.Test.GenericWrapperTests.CustomArrayWrapExplicitOnType"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); @@ -34,7 +35,7 @@ public byte VisitUtf8Span(System.ReadOnlySpan s) { switch (s[0]) { - case (byte)'a'when s.SequenceEqual("a"u8): + case (byte)'a' when s.SequenceEqual("a"u8): return 1; default: return 0; diff --git a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.GenericWrapperTests.CustomImArrayExplicitWrapOnMember.IDeserialize.cs b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.GenericWrapperTests.CustomImArrayExplicitWrapOnMember.IDeserialize.cs index 37018800..f4b46a58 100644 --- a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.GenericWrapperTests.CustomImArrayExplicitWrapOnMember.IDeserialize.cs +++ b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.GenericWrapperTests.CustomImArrayExplicitWrapOnMember.IDeserialize.cs @@ -16,17 +16,18 @@ partial record struct CustomImArrayExplicitWrapOnMember : Serde.IDeserialize("CustomImArrayExplicitWrapOnMember", fieldNames, visitor); + return deserializer.DeserializeType("CustomImArrayExplicitWrapOnMember", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Serde.Test.GenericWrapperTests.CustomImArrayExplicitWrapOnMember"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); @@ -34,7 +35,7 @@ public byte VisitUtf8Span(System.ReadOnlySpan s) { switch (s[0]) { - case (byte)'a'when s.SequenceEqual("a"u8): + case (byte)'a' when s.SequenceEqual("a"u8): return 1; default: return 0; diff --git a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.DenyUnknown.IDeserialize.cs b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.DenyUnknown.IDeserialize.cs index 17106b92..05726bff 100644 --- a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.DenyUnknown.IDeserialize.cs +++ b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.DenyUnknown.IDeserialize.cs @@ -17,17 +17,18 @@ partial record struct DenyUnknown : Serde.IDeserialize("DenyUnknown", fieldNames, visitor); + return deserializer.DeserializeType("DenyUnknown", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Serde.Test.JsonDeserializeTests.DenyUnknown"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); @@ -35,9 +36,9 @@ public byte VisitUtf8Span(System.ReadOnlySpan s) { switch (s[0]) { - case (byte)'p'when s.SequenceEqual("present"u8): + case (byte)'p' when s.SequenceEqual("present"u8): return 1; - case (byte)'m'when s.SequenceEqual("missing"u8): + case (byte)'m' when s.SequenceEqual("missing"u8): return 2; default: throw new InvalidDeserializeValueException("Unexpected field or property name in type Serde.Test.JsonDeserializeTests.DenyUnknown: '" + System.Text.Encoding.UTF8.GetString(s) + "'"); diff --git a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.ExtraMembers.IDeserialize.cs b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.ExtraMembers.IDeserialize.cs index f78d5431..5aa7a26e 100644 --- a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.ExtraMembers.IDeserialize.cs +++ b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.ExtraMembers.IDeserialize.cs @@ -16,17 +16,18 @@ partial struct ExtraMembers : Serde.IDeserialize("ExtraMembers", fieldNames, visitor); + return deserializer.DeserializeType("ExtraMembers", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Serde.Test.JsonDeserializeTests.ExtraMembers"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); @@ -34,7 +35,7 @@ public byte VisitUtf8Span(System.ReadOnlySpan s) { switch (s[0]) { - case (byte)'b'when s.SequenceEqual("b"u8): + case (byte)'b' when s.SequenceEqual("b"u8): return 1; default: return 0; diff --git a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.IdStruct.IDeserialize.cs b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.IdStruct.IDeserialize.cs index 8dc6bb7e..f40ce38a 100644 --- a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.IdStruct.IDeserialize.cs +++ b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.IdStruct.IDeserialize.cs @@ -16,17 +16,18 @@ partial struct IdStruct : Serde.IDeserialize("IdStruct", fieldNames, visitor); + return deserializer.DeserializeType("IdStruct", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Serde.Test.JsonDeserializeTests.IdStruct"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); @@ -34,7 +35,7 @@ public byte VisitUtf8Span(System.ReadOnlySpan s) { switch (s[0]) { - case (byte)'i'when s.SequenceEqual("id"u8): + case (byte)'i' when s.SequenceEqual("id"u8): return 1; default: return 0; diff --git a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.IdStructList.IDeserialize.cs b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.IdStructList.IDeserialize.cs index 00730f1a..7783354c 100644 --- a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.IdStructList.IDeserialize.cs +++ b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.IdStructList.IDeserialize.cs @@ -17,17 +17,18 @@ partial record struct IdStructList : Serde.IDeserialize("IdStructList", fieldNames, visitor); + return deserializer.DeserializeType("IdStructList", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Serde.Test.JsonDeserializeTests.IdStructList"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); @@ -35,9 +36,9 @@ public byte VisitUtf8Span(System.ReadOnlySpan s) { switch (s[0]) { - case (byte)'c'when s.SequenceEqual("count"u8): + case (byte)'c' when s.SequenceEqual("count"u8): return 1; - case (byte)'l'when s.SequenceEqual("list"u8): + case (byte)'l' when s.SequenceEqual("list"u8): return 2; default: return 0; diff --git a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.NullableFields.IDeserialize.cs b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.NullableFields.IDeserialize.cs index 13f7dd1e..75547f5a 100644 --- a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.NullableFields.IDeserialize.cs +++ b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.NullableFields.IDeserialize.cs @@ -17,17 +17,18 @@ partial class NullableFields : Serde.IDeserialize("NullableFields", fieldNames, visitor); + return deserializer.DeserializeType("NullableFields", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Serde.Test.JsonDeserializeTests.NullableFields"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); @@ -35,9 +36,9 @@ public byte VisitUtf8Span(System.ReadOnlySpan s) { switch (s[0]) { - case (byte)'s'when s.SequenceEqual("s"u8): + case (byte)'s' when s.SequenceEqual("s"u8): return 1; - case (byte)'d'when s.SequenceEqual("dict"u8): + case (byte)'d' when s.SequenceEqual("dict"u8): return 2; default: return 0; diff --git a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.SetToNull.IDeserialize.cs b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.SetToNull.IDeserialize.cs index 8b76376f..47b0c70e 100644 --- a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.SetToNull.IDeserialize.cs +++ b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.SetToNull.IDeserialize.cs @@ -17,17 +17,18 @@ partial record struct SetToNull : Serde.IDeserialize("SetToNull", fieldNames, visitor); + return deserializer.DeserializeType("SetToNull", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Serde.Test.JsonDeserializeTests.SetToNull"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); @@ -35,9 +36,9 @@ public byte VisitUtf8Span(System.ReadOnlySpan s) { switch (s[0]) { - case (byte)'p'when s.SequenceEqual("present"u8): + case (byte)'p' when s.SequenceEqual("present"u8): return 1; - case (byte)'m'when s.SequenceEqual("missing"u8): + case (byte)'m' when s.SequenceEqual("missing"u8): return 2; default: return 0; diff --git a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.ThrowMissing.IDeserialize.cs b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.ThrowMissing.IDeserialize.cs index 5311e8b3..890acbf9 100644 --- a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.ThrowMissing.IDeserialize.cs +++ b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.JsonDeserializeTests.ThrowMissing.IDeserialize.cs @@ -17,17 +17,18 @@ partial record struct ThrowMissing : Serde.IDeserialize("ThrowMissing", fieldNames, visitor); + return deserializer.DeserializeType("ThrowMissing", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Serde.Test.JsonDeserializeTests.ThrowMissing"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); @@ -35,9 +36,9 @@ public byte VisitUtf8Span(System.ReadOnlySpan s) { switch (s[0]) { - case (byte)'p'when s.SequenceEqual("present"u8): + case (byte)'p' when s.SequenceEqual("present"u8): return 1; - case (byte)'m'when s.SequenceEqual("missing"u8): + case (byte)'m' when s.SequenceEqual("missing"u8): return 2; default: return 0; diff --git a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.MaxSizeType.IDeserialize.cs b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.MaxSizeType.IDeserialize.cs index e176ce9a..49ab49a3 100644 --- a/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.MaxSizeType.IDeserialize.cs +++ b/test/Serde.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.MaxSizeType.IDeserialize.cs @@ -77,17 +77,18 @@ partial struct MaxSizeType : Serde.IDeserialize "Field63", "Field64" }; - return deserializer.DeserializeType("MaxSizeType", fieldNames, visitor); + return deserializer.DeserializeType("MaxSizeType", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Serde.Test.MaxSizeType"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); @@ -95,133 +96,133 @@ public byte VisitUtf8Span(System.ReadOnlySpan s) { switch (s[0]) { - case (byte)'f'when s.SequenceEqual("field1"u8): + case (byte)'f' when s.SequenceEqual("field1"u8): return 1; - case (byte)'f'when s.SequenceEqual("field2"u8): + case (byte)'f' when s.SequenceEqual("field2"u8): return 2; - case (byte)'f'when s.SequenceEqual("field3"u8): + case (byte)'f' when s.SequenceEqual("field3"u8): return 3; - case (byte)'f'when s.SequenceEqual("field4"u8): + case (byte)'f' when s.SequenceEqual("field4"u8): return 4; - case (byte)'f'when s.SequenceEqual("field5"u8): + case (byte)'f' when s.SequenceEqual("field5"u8): return 5; - case (byte)'f'when s.SequenceEqual("field6"u8): + case (byte)'f' when s.SequenceEqual("field6"u8): return 6; - case (byte)'f'when s.SequenceEqual("field7"u8): + case (byte)'f' when s.SequenceEqual("field7"u8): return 7; - case (byte)'f'when s.SequenceEqual("field8"u8): + case (byte)'f' when s.SequenceEqual("field8"u8): return 8; - case (byte)'f'when s.SequenceEqual("field9"u8): + case (byte)'f' when s.SequenceEqual("field9"u8): return 9; - case (byte)'f'when s.SequenceEqual("field10"u8): + case (byte)'f' when s.SequenceEqual("field10"u8): return 10; - case (byte)'f'when s.SequenceEqual("field11"u8): + case (byte)'f' when s.SequenceEqual("field11"u8): return 11; - case (byte)'f'when s.SequenceEqual("field12"u8): + case (byte)'f' when s.SequenceEqual("field12"u8): return 12; - case (byte)'f'when s.SequenceEqual("field13"u8): + case (byte)'f' when s.SequenceEqual("field13"u8): return 13; - case (byte)'f'when s.SequenceEqual("field14"u8): + case (byte)'f' when s.SequenceEqual("field14"u8): return 14; - case (byte)'f'when s.SequenceEqual("field15"u8): + case (byte)'f' when s.SequenceEqual("field15"u8): return 15; - case (byte)'f'when s.SequenceEqual("field16"u8): + case (byte)'f' when s.SequenceEqual("field16"u8): return 16; - case (byte)'f'when s.SequenceEqual("field17"u8): + case (byte)'f' when s.SequenceEqual("field17"u8): return 17; - case (byte)'f'when s.SequenceEqual("field18"u8): + case (byte)'f' when s.SequenceEqual("field18"u8): return 18; - case (byte)'f'when s.SequenceEqual("field19"u8): + case (byte)'f' when s.SequenceEqual("field19"u8): return 19; - case (byte)'f'when s.SequenceEqual("field20"u8): + case (byte)'f' when s.SequenceEqual("field20"u8): return 20; - case (byte)'f'when s.SequenceEqual("field21"u8): + case (byte)'f' when s.SequenceEqual("field21"u8): return 21; - case (byte)'f'when s.SequenceEqual("field22"u8): + case (byte)'f' when s.SequenceEqual("field22"u8): return 22; - case (byte)'f'when s.SequenceEqual("field23"u8): + case (byte)'f' when s.SequenceEqual("field23"u8): return 23; - case (byte)'f'when s.SequenceEqual("field24"u8): + case (byte)'f' when s.SequenceEqual("field24"u8): return 24; - case (byte)'f'when s.SequenceEqual("field25"u8): + case (byte)'f' when s.SequenceEqual("field25"u8): return 25; - case (byte)'f'when s.SequenceEqual("field26"u8): + case (byte)'f' when s.SequenceEqual("field26"u8): return 26; - case (byte)'f'when s.SequenceEqual("field27"u8): + case (byte)'f' when s.SequenceEqual("field27"u8): return 27; - case (byte)'f'when s.SequenceEqual("field28"u8): + case (byte)'f' when s.SequenceEqual("field28"u8): return 28; - case (byte)'f'when s.SequenceEqual("field29"u8): + case (byte)'f' when s.SequenceEqual("field29"u8): return 29; - case (byte)'f'when s.SequenceEqual("field30"u8): + case (byte)'f' when s.SequenceEqual("field30"u8): return 30; - case (byte)'f'when s.SequenceEqual("field31"u8): + case (byte)'f' when s.SequenceEqual("field31"u8): return 31; - case (byte)'f'when s.SequenceEqual("field32"u8): + case (byte)'f' when s.SequenceEqual("field32"u8): return 32; - case (byte)'f'when s.SequenceEqual("field33"u8): + case (byte)'f' when s.SequenceEqual("field33"u8): return 33; - case (byte)'f'when s.SequenceEqual("field34"u8): + case (byte)'f' when s.SequenceEqual("field34"u8): return 34; - case (byte)'f'when s.SequenceEqual("field35"u8): + case (byte)'f' when s.SequenceEqual("field35"u8): return 35; - case (byte)'f'when s.SequenceEqual("field36"u8): + case (byte)'f' when s.SequenceEqual("field36"u8): return 36; - case (byte)'f'when s.SequenceEqual("field37"u8): + case (byte)'f' when s.SequenceEqual("field37"u8): return 37; - case (byte)'f'when s.SequenceEqual("field38"u8): + case (byte)'f' when s.SequenceEqual("field38"u8): return 38; - case (byte)'f'when s.SequenceEqual("field39"u8): + case (byte)'f' when s.SequenceEqual("field39"u8): return 39; - case (byte)'f'when s.SequenceEqual("field40"u8): + case (byte)'f' when s.SequenceEqual("field40"u8): return 40; - case (byte)'f'when s.SequenceEqual("field41"u8): + case (byte)'f' when s.SequenceEqual("field41"u8): return 41; - case (byte)'f'when s.SequenceEqual("field42"u8): + case (byte)'f' when s.SequenceEqual("field42"u8): return 42; - case (byte)'f'when s.SequenceEqual("field43"u8): + case (byte)'f' when s.SequenceEqual("field43"u8): return 43; - case (byte)'f'when s.SequenceEqual("field44"u8): + case (byte)'f' when s.SequenceEqual("field44"u8): return 44; - case (byte)'f'when s.SequenceEqual("field45"u8): + case (byte)'f' when s.SequenceEqual("field45"u8): return 45; - case (byte)'f'when s.SequenceEqual("field46"u8): + case (byte)'f' when s.SequenceEqual("field46"u8): return 46; - case (byte)'f'when s.SequenceEqual("field47"u8): + case (byte)'f' when s.SequenceEqual("field47"u8): return 47; - case (byte)'f'when s.SequenceEqual("field48"u8): + case (byte)'f' when s.SequenceEqual("field48"u8): return 48; - case (byte)'f'when s.SequenceEqual("field49"u8): + case (byte)'f' when s.SequenceEqual("field49"u8): return 49; - case (byte)'f'when s.SequenceEqual("field50"u8): + case (byte)'f' when s.SequenceEqual("field50"u8): return 50; - case (byte)'f'when s.SequenceEqual("field51"u8): + case (byte)'f' when s.SequenceEqual("field51"u8): return 51; - case (byte)'f'when s.SequenceEqual("field52"u8): + case (byte)'f' when s.SequenceEqual("field52"u8): return 52; - case (byte)'f'when s.SequenceEqual("field53"u8): + case (byte)'f' when s.SequenceEqual("field53"u8): return 53; - case (byte)'f'when s.SequenceEqual("field54"u8): + case (byte)'f' when s.SequenceEqual("field54"u8): return 54; - case (byte)'f'when s.SequenceEqual("field55"u8): + case (byte)'f' when s.SequenceEqual("field55"u8): return 55; - case (byte)'f'when s.SequenceEqual("field56"u8): + case (byte)'f' when s.SequenceEqual("field56"u8): return 56; - case (byte)'f'when s.SequenceEqual("field57"u8): + case (byte)'f' when s.SequenceEqual("field57"u8): return 57; - case (byte)'f'when s.SequenceEqual("field58"u8): + case (byte)'f' when s.SequenceEqual("field58"u8): return 58; - case (byte)'f'when s.SequenceEqual("field59"u8): + case (byte)'f' when s.SequenceEqual("field59"u8): return 59; - case (byte)'f'when s.SequenceEqual("field60"u8): + case (byte)'f' when s.SequenceEqual("field60"u8): return 60; - case (byte)'f'when s.SequenceEqual("field61"u8): + case (byte)'f' when s.SequenceEqual("field61"u8): return 61; - case (byte)'f'when s.SequenceEqual("field62"u8): + case (byte)'f' when s.SequenceEqual("field62"u8): return 62; - case (byte)'f'when s.SequenceEqual("field63"u8): + case (byte)'f' when s.SequenceEqual("field63"u8): return 63; - case (byte)'f'when s.SequenceEqual("field64"u8): + case (byte)'f' when s.SequenceEqual("field64"u8): return 64; default: return 0; diff --git a/test/Serde.Xml.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.ColorEnumWrap.IDeserialize.cs b/test/Serde.Xml.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.ColorEnumWrap.IDeserialize.cs index 98724277..8f187592 100644 --- a/test/Serde.Xml.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.ColorEnumWrap.IDeserialize.cs +++ b/test/Serde.Xml.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.ColorEnumWrap.IDeserialize.cs @@ -12,7 +12,7 @@ partial record struct ColorEnumWrap : Serde.IDeserialize.Deserialize(ref D deserializer) { var visitor = new SerdeVisitor(); - return deserializer.DeserializeString(visitor); + return deserializer.DeserializeString(visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor diff --git a/test/Serde.Xml.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.IDeserialize.cs b/test/Serde.Xml.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.IDeserialize.cs index 3c91c714..a704df39 100644 --- a/test/Serde.Xml.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.IDeserialize.cs +++ b/test/Serde.Xml.Test/generated/SerdeGenerator/Serde.SerdeImplRoslynGenerator/Serde.Test.AllInOne.IDeserialize.cs @@ -29,17 +29,18 @@ partial record AllInOne : Serde.IDeserialize "IntImm", "Color" }; - return deserializer.DeserializeType("AllInOne", fieldNames, visitor); + return deserializer.DeserializeType("AllInOne", fieldNames, visitor); } private sealed class SerdeVisitor : Serde.IDeserializeVisitor { public string ExpectedTypeName => "Serde.Test.AllInOne"; - private struct FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor + private sealed class FieldNameVisitor : Serde.IDeserialize, Serde.IDeserializeVisitor { + public static readonly FieldNameVisitor Instance = new FieldNameVisitor(); public static byte Deserialize(ref D deserializer) - where D : IDeserializer => deserializer.DeserializeString(new FieldNameVisitor()); + where D : IDeserializer => deserializer.DeserializeString(Instance); public string ExpectedTypeName => "string"; byte Serde.IDeserializeVisitor.VisitString(string s) => VisitUtf8Span(System.Text.Encoding.UTF8.GetBytes(s)); @@ -47,37 +48,37 @@ public byte VisitUtf8Span(System.ReadOnlySpan s) { switch (s[0]) { - case (byte)'b'when s.SequenceEqual("boolField"u8): + case (byte)'b' when s.SequenceEqual("boolField"u8): return 1; - case (byte)'c'when s.SequenceEqual("charField"u8): + case (byte)'c' when s.SequenceEqual("charField"u8): return 2; - case (byte)'b'when s.SequenceEqual("byteField"u8): + case (byte)'b' when s.SequenceEqual("byteField"u8): return 3; - case (byte)'u'when s.SequenceEqual("uShortField"u8): + case (byte)'u' when s.SequenceEqual("uShortField"u8): return 4; - case (byte)'u'when s.SequenceEqual("uIntField"u8): + case (byte)'u' when s.SequenceEqual("uIntField"u8): return 5; - case (byte)'u'when s.SequenceEqual("uLongField"u8): + case (byte)'u' when s.SequenceEqual("uLongField"u8): return 6; - case (byte)'s'when s.SequenceEqual("sByteField"u8): + case (byte)'s' when s.SequenceEqual("sByteField"u8): return 7; - case (byte)'s'when s.SequenceEqual("shortField"u8): + case (byte)'s' when s.SequenceEqual("shortField"u8): return 8; - case (byte)'i'when s.SequenceEqual("intField"u8): + case (byte)'i' when s.SequenceEqual("intField"u8): return 9; - case (byte)'l'when s.SequenceEqual("longField"u8): + case (byte)'l' when s.SequenceEqual("longField"u8): return 10; - case (byte)'s'when s.SequenceEqual("stringField"u8): + case (byte)'s' when s.SequenceEqual("stringField"u8): return 11; - case (byte)'n'when s.SequenceEqual("nullStringField"u8): + case (byte)'n' when s.SequenceEqual("nullStringField"u8): return 12; - case (byte)'u'when s.SequenceEqual("uIntArr"u8): + case (byte)'u' when s.SequenceEqual("uIntArr"u8): return 13; - case (byte)'n'when s.SequenceEqual("nestedArr"u8): + case (byte)'n' when s.SequenceEqual("nestedArr"u8): return 14; - case (byte)'i'when s.SequenceEqual("intImm"u8): + case (byte)'i' when s.SequenceEqual("intImm"u8): return 15; - case (byte)'c'when s.SequenceEqual("color"u8): + case (byte)'c' when s.SequenceEqual("color"u8): return 16; default: return 0;