diff options
author | neuecc <ils@neue.cc> | 2017-05-24 08:47:52 +0300 |
---|---|---|
committer | neuecc <ils@neue.cc> | 2017-05-24 08:47:52 +0300 |
commit | 51952eee888f3b57b8420502d421e2d98dcb80ce (patch) | |
tree | f1a59eaa35d8e2d1f07c5ab18602dabe2bdd77eb | |
parent | 129776eb8117865cc86f11bb87a6e22b98965cdf (diff) |
fix Mpc(generate invalid code when type is in global namespace, union key is not sequential from zero)v1.2.3
-rw-r--r-- | nuget/MessagePack.AspNetCoreMvcFormatter.nuspec | 4 | ||||
-rw-r--r-- | nuget/MessagePack.ImmutableCollection.nuspec | 8 | ||||
-rw-r--r-- | nuget/MessagePack.ReactiveProperty.nuspec | 8 | ||||
-rw-r--r-- | nuget/MessagePack.UnityShims.nuspec | 8 | ||||
-rw-r--r-- | nuget/MessagePack.nuspec | 2 | ||||
-rw-r--r-- | nuget/push.bat | 10 | ||||
-rw-r--r-- | sandbox/Sandbox/Generated.cs | 943 | ||||
-rw-r--r-- | sandbox/Sandbox/Program.cs | 43 | ||||
-rw-r--r-- | sandbox/SharedData/Class1.cs | 76 | ||||
-rw-r--r-- | sandbox/SharedData/SharedData.csproj | 14 | ||||
-rw-r--r-- | sandbox/SharedData/packages.config | 6 | ||||
-rw-r--r-- | src/MessagePack.CodeGenerator/CodeAnalysis/Definitions.cs | 6 | ||||
-rw-r--r-- | src/MessagePack.CodeGenerator/Generator/ResolverTemplate.cs | 2 | ||||
-rw-r--r-- | src/MessagePack.CodeGenerator/Generator/ResolverTemplate.tt | 2 | ||||
-rw-r--r-- | src/MessagePack.CodeGenerator/Generator/UnionTemplate.cs | 17 | ||||
-rw-r--r-- | src/MessagePack.CodeGenerator/Generator/UnionTemplate.tt | 5 | ||||
-rw-r--r-- | src/MessagePack.CodeGenerator/Program.cs | 6 | ||||
-rw-r--r-- | tests/MessagePack.Tests/UnionResolverTest.cs | 18 |
18 files changed, 1051 insertions, 127 deletions
diff --git a/nuget/MessagePack.AspNetCoreMvcFormatter.nuspec b/nuget/MessagePack.AspNetCoreMvcFormatter.nuspec index f717f9ed..075dd8c1 100644 --- a/nuget/MessagePack.AspNetCoreMvcFormatter.nuspec +++ b/nuget/MessagePack.AspNetCoreMvcFormatter.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MessagePack.AspNetCoreMvcFormatter</id> - <version>1.2.2</version> + <version>1.2.3</version> <title>ASP.NET Core MVC Input/Output MessagePack formatter</title> <authors>neuecc</authors> <owners>neuecc</owners> @@ -13,7 +13,7 @@ <tags>MsgPack, MessagePack, Serialization, Formatter, Serializer, aspnetcore, aspnetcoremvc</tags> <dependencies> <group targetFramework=".NETStandard1.4"> - <dependency id="MessagePack" version="1.2.2" /> + <dependency id="MessagePack" version="1.2.3" /> <dependency id="Microsoft.AspNetCore.Mvc.Abstractions" version="1.2.0" /> </group> </dependencies> diff --git a/nuget/MessagePack.ImmutableCollection.nuspec b/nuget/MessagePack.ImmutableCollection.nuspec index 2889f375..2342d4e4 100644 --- a/nuget/MessagePack.ImmutableCollection.nuspec +++ b/nuget/MessagePack.ImmutableCollection.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MessagePack.ImmutableCollection</id> - <version>1.2.2</version> + <version>1.2.3</version> <title>MessagePack for C# Extension Support for ImmutableCollection</title> <authors>neuecc</authors> <owners>neuecc</owners> @@ -17,15 +17,15 @@ </frameworkAssemblies> <dependencies> <group targetFramework=".NETFramework4.7"> - <dependency id="MessagePack" version="1.2.2" /> + <dependency id="MessagePack" version="1.2.3" /> <dependency id="System.Collections.Immutable" version="1.3.1" /> </group> <group targetFramework=".NETFramework4.5"> - <dependency id="MessagePack" version="1.2.2" /> + <dependency id="MessagePack" version="1.2.3" /> <dependency id="System.Collections.Immutable" version="1.3.1" /> </group> <group targetFramework=".NETStandard1.4"> - <dependency id="MessagePack" version="1.2.2" /> + <dependency id="MessagePack" version="1.2.3" /> <dependency id="System.Collections.Immutable" version="1.3.1" /> </group> </dependencies> diff --git a/nuget/MessagePack.ReactiveProperty.nuspec b/nuget/MessagePack.ReactiveProperty.nuspec index 024f85db..f5ddb42e 100644 --- a/nuget/MessagePack.ReactiveProperty.nuspec +++ b/nuget/MessagePack.ReactiveProperty.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MessagePack.ReactiveProperty</id> - <version>1.2.2</version> + <version>1.2.3</version> <title>MessagePack for C# Extension Support for ReactiveProperty</title> <authors>neuecc</authors> <owners>neuecc</owners> @@ -17,15 +17,15 @@ </frameworkAssemblies> <dependencies> <group targetFramework=".NETFramework4.7"> - <dependency id="MessagePack" version="1.2.2" /> + <dependency id="MessagePack" version="1.2.3" /> <dependency id="ReactiveProperty" version="3.5.1" /> </group> <group targetFramework=".NETFramework4.5"> - <dependency id="MessagePack" version="1.2.2" /> + <dependency id="MessagePack" version="1.2.3" /> <dependency id="ReactiveProperty" version="3.5.1" /> </group> <group targetFramework=".NETStandard1.4"> - <dependency id="MessagePack" version="1.2.2" /> + <dependency id="MessagePack" version="1.2.3" /> <dependency id="ReactiveProperty" version="3.5.1" /> </group> </dependencies> diff --git a/nuget/MessagePack.UnityShims.nuspec b/nuget/MessagePack.UnityShims.nuspec index ddb82d40..bcbc3fb1 100644 --- a/nuget/MessagePack.UnityShims.nuspec +++ b/nuget/MessagePack.UnityShims.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MessagePack.UnityShims</id> - <version>1.2.2</version> + <version>1.2.3</version> <title>MessagePack for C# Extension Support for Unity(add pseudo Vector type and fast Vectory[] extension formatter)</title> <authors>neuecc</authors> <owners>neuecc</owners> @@ -17,13 +17,13 @@ </frameworkAssemblies> <dependencies> <group targetFramework=".NETFramework4.7"> - <dependency id="MessagePack" version="1.2.2" /> + <dependency id="MessagePack" version="1.2.3" /> </group> <group targetFramework=".NETFramework4.5"> - <dependency id="MessagePack" version="1.2.2" /> + <dependency id="MessagePack" version="1.2.3" /> </group> <group targetFramework=".NETStandard1.4"> - <dependency id="MessagePack" version="1.2.2" /> + <dependency id="MessagePack" version="1.2.3" /> </group> </dependencies> </metadata> diff --git a/nuget/MessagePack.nuspec b/nuget/MessagePack.nuspec index b41282c2..141ead1d 100644 --- a/nuget/MessagePack.nuspec +++ b/nuget/MessagePack.nuspec @@ -2,7 +2,7 @@ <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>MessagePack</id> - <version>1.2.2</version> + <version>1.2.3</version> <title>MessagePack for C#</title> <authors>neuecc</authors> <owners>neuecc</owners> diff --git a/nuget/push.bat b/nuget/push.bat index b6a95a5b..afafe812 100644 --- a/nuget/push.bat +++ b/nuget/push.bat @@ -1,6 +1,6 @@ -nuget push MessagePack.1.2.2.nupkg -Source https://www.nuget.org/api/v2/package -nuget push MessagePack.ImmutableCollection.1.2.2.nupkg -Source https://www.nuget.org/api/v2/package -nuget push MessagePack.ReactiveProperty.1.2.2.nupkg -Source https://www.nuget.org/api/v2/package -nuget push MessagePack.UnityShims.1.2.2.nupkg -Source https://www.nuget.org/api/v2/package -nuget push MessagePack.AspNetCoreMvcFormatter.1.2.2.nupkg -Source https://www.nuget.org/api/v2/package +nuget push MessagePack.1.2.3.nupkg -Source https://www.nuget.org/api/v2/package +nuget push MessagePack.ImmutableCollection.1.2.3.nupkg -Source https://www.nuget.org/api/v2/package +nuget push MessagePack.ReactiveProperty.1.2.3.nupkg -Source https://www.nuget.org/api/v2/package +nuget push MessagePack.UnityShims.1.2.3.nupkg -Source https://www.nuget.org/api/v2/package +nuget push MessagePack.AspNetCoreMvcFormatter.1.2.3.nupkg -Source https://www.nuget.org/api/v2/package REM nuget push MessagePackAnalyzer.1.6.0.nupkg -Source https://www.nuget.org/api/v2/package
\ No newline at end of file diff --git a/sandbox/Sandbox/Generated.cs b/sandbox/Sandbox/Generated.cs index 6fbeb940..a4c70c8b 100644 --- a/sandbox/Sandbox/Generated.cs +++ b/sandbox/Sandbox/Generated.cs @@ -43,45 +43,56 @@ namespace MessagePack.Resolvers static GeneratedResolverGetFormatterHelper() { - lookup = new global::System.Collections.Generic.Dictionary<Type, int>(37) + lookup = new global::System.Collections.Generic.Dictionary<Type, int>(48) { {typeof(global::SharedData.ByteEnum), 0 }, {typeof(global::SharedData.IUnionChecker), 1 }, {typeof(global::SharedData.IUnionChecker2), 2 }, {typeof(global::SharedData.IIVersioningUnion), 3 }, - {typeof(global::SharedData.FirstSimpleData), 4 }, - {typeof(global::SharedData.SimlpeStringKeyData), 5 }, - {typeof(global::SharedData.SimpleStructIntKeyData), 6 }, - {typeof(global::SharedData.SimpleStructStringKeyData), 7 }, - {typeof(global::SharedData.SimpleIntKeyData), 8 }, - {typeof(global::SharedData.Vector2), 9 }, - {typeof(global::SharedData.EmptyClass), 10 }, - {typeof(global::SharedData.EmptyStruct), 11 }, - {typeof(global::SharedData.Version1), 12 }, - {typeof(global::SharedData.Version2), 13 }, - {typeof(global::SharedData.Version0), 14 }, - {typeof(global::SharedData.HolderV1), 15 }, - {typeof(global::SharedData.HolderV2), 16 }, - {typeof(global::SharedData.HolderV0), 17 }, - {typeof(global::SharedData.Callback1), 18 }, - {typeof(global::SharedData.Callback1_2), 19 }, - {typeof(global::SharedData.Callback2), 20 }, - {typeof(global::SharedData.Callback2_2), 21 }, - {typeof(global::SharedData.MySubUnion1), 22 }, - {typeof(global::SharedData.MySubUnion2), 23 }, - {typeof(global::SharedData.MySubUnion3), 24 }, - {typeof(global::SharedData.MySubUnion4), 25 }, - {typeof(global::SharedData.VersioningUnion), 26 }, - {typeof(global::SharedData.MyClass), 27 }, - {typeof(global::SharedData.VersionBlockTest), 28 }, - {typeof(global::SharedData.UnVersionBlockTest), 29 }, - {typeof(global::SharedData.Empty1), 30 }, - {typeof(global::SharedData.Empty2), 31 }, - {typeof(global::SharedData.NonEmpty1), 32 }, - {typeof(global::SharedData.NonEmpty2), 33 }, - {typeof(global::SharedData.VectorLike2), 34 }, - {typeof(global::SharedData.Vector3Like), 35 }, - {typeof(global::SharedData.ArrayOptimizeClass), 36 }, + {typeof(global::SharedData.IUnionSample), 4 }, + {typeof(global::IMessageBody), 5 }, + {typeof(global::SharedData.FirstSimpleData), 6 }, + {typeof(global::SharedData.SimlpeStringKeyData), 7 }, + {typeof(global::SharedData.SimpleStructIntKeyData), 8 }, + {typeof(global::SharedData.SimpleStructStringKeyData), 9 }, + {typeof(global::SharedData.SimpleIntKeyData), 10 }, + {typeof(global::SharedData.Vector2), 11 }, + {typeof(global::SharedData.EmptyClass), 12 }, + {typeof(global::SharedData.EmptyStruct), 13 }, + {typeof(global::SharedData.Version1), 14 }, + {typeof(global::SharedData.Version2), 15 }, + {typeof(global::SharedData.Version0), 16 }, + {typeof(global::SharedData.HolderV1), 17 }, + {typeof(global::SharedData.HolderV2), 18 }, + {typeof(global::SharedData.HolderV0), 19 }, + {typeof(global::SharedData.Callback1), 20 }, + {typeof(global::SharedData.Callback1_2), 21 }, + {typeof(global::SharedData.Callback2), 22 }, + {typeof(global::SharedData.Callback2_2), 23 }, + {typeof(global::SharedData.MySubUnion1), 24 }, + {typeof(global::SharedData.MySubUnion2), 25 }, + {typeof(global::SharedData.MySubUnion3), 26 }, + {typeof(global::SharedData.MySubUnion4), 27 }, + {typeof(global::SharedData.VersioningUnion), 28 }, + {typeof(global::SharedData.MyClass), 29 }, + {typeof(global::SharedData.VersionBlockTest), 30 }, + {typeof(global::SharedData.UnVersionBlockTest), 31 }, + {typeof(global::SharedData.Empty1), 32 }, + {typeof(global::SharedData.Empty2), 33 }, + {typeof(global::SharedData.NonEmpty1), 34 }, + {typeof(global::SharedData.NonEmpty2), 35 }, + {typeof(global::SharedData.VectorLike2), 36 }, + {typeof(global::SharedData.Vector3Like), 37 }, + {typeof(global::SharedData.ArrayOptimizeClass), 38 }, + {typeof(global::SharedData.NestParent.NestContract), 39 }, + {typeof(global::SharedData.FooClass), 40 }, + {typeof(global::SharedData.BarClass), 41 }, + {typeof(global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga), 42 }, + {typeof(global::GlobalMan), 43 }, + {typeof(global::Message), 44 }, + {typeof(global::TextMessageBody), 45 }, + {typeof(global::StampMessageBody), 46 }, + {typeof(global::QuestMessageBody), 47 }, }; } @@ -96,39 +107,50 @@ namespace MessagePack.Resolvers case 1: return new MessagePack.Formatters.SharedData.IUnionCheckerFormatter(); case 2: return new MessagePack.Formatters.SharedData.IUnionChecker2Formatter(); case 3: return new MessagePack.Formatters.SharedData.IIVersioningUnionFormatter(); - case 4: return new MessagePack.Formatters.SharedData.FirstSimpleDataFormatter(); - case 5: return new MessagePack.Formatters.SharedData.SimlpeStringKeyDataFormatter(); - case 6: return new MessagePack.Formatters.SharedData.SimpleStructIntKeyDataFormatter(); - case 7: return new MessagePack.Formatters.SharedData.SimpleStructStringKeyDataFormatter(); - case 8: return new MessagePack.Formatters.SharedData.SimpleIntKeyDataFormatter(); - case 9: return new MessagePack.Formatters.SharedData.Vector2Formatter(); - case 10: return new MessagePack.Formatters.SharedData.EmptyClassFormatter(); - case 11: return new MessagePack.Formatters.SharedData.EmptyStructFormatter(); - case 12: return new MessagePack.Formatters.SharedData.Version1Formatter(); - case 13: return new MessagePack.Formatters.SharedData.Version2Formatter(); - case 14: return new MessagePack.Formatters.SharedData.Version0Formatter(); - case 15: return new MessagePack.Formatters.SharedData.HolderV1Formatter(); - case 16: return new MessagePack.Formatters.SharedData.HolderV2Formatter(); - case 17: return new MessagePack.Formatters.SharedData.HolderV0Formatter(); - case 18: return new MessagePack.Formatters.SharedData.Callback1Formatter(); - case 19: return new MessagePack.Formatters.SharedData.Callback1_2Formatter(); - case 20: return new MessagePack.Formatters.SharedData.Callback2Formatter(); - case 21: return new MessagePack.Formatters.SharedData.Callback2_2Formatter(); - case 22: return new MessagePack.Formatters.SharedData.MySubUnion1Formatter(); - case 23: return new MessagePack.Formatters.SharedData.MySubUnion2Formatter(); - case 24: return new MessagePack.Formatters.SharedData.MySubUnion3Formatter(); - case 25: return new MessagePack.Formatters.SharedData.MySubUnion4Formatter(); - case 26: return new MessagePack.Formatters.SharedData.VersioningUnionFormatter(); - case 27: return new MessagePack.Formatters.SharedData.MyClassFormatter(); - case 28: return new MessagePack.Formatters.SharedData.VersionBlockTestFormatter(); - case 29: return new MessagePack.Formatters.SharedData.UnVersionBlockTestFormatter(); - case 30: return new MessagePack.Formatters.SharedData.Empty1Formatter(); - case 31: return new MessagePack.Formatters.SharedData.Empty2Formatter(); - case 32: return new MessagePack.Formatters.SharedData.NonEmpty1Formatter(); - case 33: return new MessagePack.Formatters.SharedData.NonEmpty2Formatter(); - case 34: return new MessagePack.Formatters.SharedData.VectorLike2Formatter(); - case 35: return new MessagePack.Formatters.SharedData.Vector3LikeFormatter(); - case 36: return new MessagePack.Formatters.SharedData.ArrayOptimizeClassFormatter(); + case 4: return new MessagePack.Formatters.SharedData.IUnionSampleFormatter(); + case 5: return new MessagePack.Formatters.IMessageBodyFormatter(); + case 6: return new MessagePack.Formatters.SharedData.FirstSimpleDataFormatter(); + case 7: return new MessagePack.Formatters.SharedData.SimlpeStringKeyDataFormatter(); + case 8: return new MessagePack.Formatters.SharedData.SimpleStructIntKeyDataFormatter(); + case 9: return new MessagePack.Formatters.SharedData.SimpleStructStringKeyDataFormatter(); + case 10: return new MessagePack.Formatters.SharedData.SimpleIntKeyDataFormatter(); + case 11: return new MessagePack.Formatters.SharedData.Vector2Formatter(); + case 12: return new MessagePack.Formatters.SharedData.EmptyClassFormatter(); + case 13: return new MessagePack.Formatters.SharedData.EmptyStructFormatter(); + case 14: return new MessagePack.Formatters.SharedData.Version1Formatter(); + case 15: return new MessagePack.Formatters.SharedData.Version2Formatter(); + case 16: return new MessagePack.Formatters.SharedData.Version0Formatter(); + case 17: return new MessagePack.Formatters.SharedData.HolderV1Formatter(); + case 18: return new MessagePack.Formatters.SharedData.HolderV2Formatter(); + case 19: return new MessagePack.Formatters.SharedData.HolderV0Formatter(); + case 20: return new MessagePack.Formatters.SharedData.Callback1Formatter(); + case 21: return new MessagePack.Formatters.SharedData.Callback1_2Formatter(); + case 22: return new MessagePack.Formatters.SharedData.Callback2Formatter(); + case 23: return new MessagePack.Formatters.SharedData.Callback2_2Formatter(); + case 24: return new MessagePack.Formatters.SharedData.MySubUnion1Formatter(); + case 25: return new MessagePack.Formatters.SharedData.MySubUnion2Formatter(); + case 26: return new MessagePack.Formatters.SharedData.MySubUnion3Formatter(); + case 27: return new MessagePack.Formatters.SharedData.MySubUnion4Formatter(); + case 28: return new MessagePack.Formatters.SharedData.VersioningUnionFormatter(); + case 29: return new MessagePack.Formatters.SharedData.MyClassFormatter(); + case 30: return new MessagePack.Formatters.SharedData.VersionBlockTestFormatter(); + case 31: return new MessagePack.Formatters.SharedData.UnVersionBlockTestFormatter(); + case 32: return new MessagePack.Formatters.SharedData.Empty1Formatter(); + case 33: return new MessagePack.Formatters.SharedData.Empty2Formatter(); + case 34: return new MessagePack.Formatters.SharedData.NonEmpty1Formatter(); + case 35: return new MessagePack.Formatters.SharedData.NonEmpty2Formatter(); + case 36: return new MessagePack.Formatters.SharedData.VectorLike2Formatter(); + case 37: return new MessagePack.Formatters.SharedData.Vector3LikeFormatter(); + case 38: return new MessagePack.Formatters.SharedData.ArrayOptimizeClassFormatter(); + case 39: return new MessagePack.Formatters.SharedData.NestParent_NestContractFormatter(); + case 40: return new MessagePack.Formatters.SharedData.FooClassFormatter(); + case 41: return new MessagePack.Formatters.SharedData.BarClassFormatter(); + case 42: return new MessagePack.Formatters.Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqagaFormatter(); + case 43: return new MessagePack.Formatters.GlobalManFormatter(); + case 44: return new MessagePack.Formatters.MessageFormatter(); + case 45: return new MessagePack.Formatters.TextMessageBodyFormatter(); + case 46: return new MessagePack.Formatters.StampMessageBodyFormatter(); + case 47: return new MessagePack.Formatters.QuestMessageBodyFormatter(); default: return null; } } @@ -256,6 +278,11 @@ namespace MessagePack.Formatters.SharedData var key = MessagePackBinary.ReadInt32(bytes, offset, out readSize); offset += readSize; + if (!this.keyToJumpMap.TryGetValue(key, out key)) + { + key = -1; + } + global::SharedData.IUnionChecker result = null; switch (key) { @@ -360,6 +387,11 @@ namespace MessagePack.Formatters.SharedData var key = MessagePackBinary.ReadInt32(bytes, offset, out readSize); offset += readSize; + if (!this.keyToJumpMap.TryGetValue(key, out key)) + { + key = -1; + } + global::SharedData.IUnionChecker2 result = null; switch (key) { @@ -449,6 +481,11 @@ namespace MessagePack.Formatters.SharedData var key = MessagePackBinary.ReadInt32(bytes, offset, out readSize); offset += readSize; + if (!this.keyToJumpMap.TryGetValue(key, out key)) + { + key = -1; + } + global::SharedData.IIVersioningUnion result = null; switch (key) { @@ -467,6 +504,215 @@ namespace MessagePack.Formatters.SharedData } } + public sealed class IUnionSampleFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::SharedData.IUnionSample> + { + readonly Dictionary<RuntimeTypeHandle, KeyValuePair<int, int>> typeToKeyAndJumpMap; + readonly Dictionary<int, int> keyToJumpMap; + + public IUnionSampleFormatter() + { + this.typeToKeyAndJumpMap = new Dictionary<RuntimeTypeHandle, KeyValuePair<int, int>>(2, global::MessagePack.Internal.RuntimeTypeHandleEqualityComparer.Default) + { + { typeof(global::SharedData.FooClass).TypeHandle, new KeyValuePair<int, int>(0, 0) }, + { typeof(global::SharedData.BarClass).TypeHandle, new KeyValuePair<int, int>(100, 1) }, + }; + this.keyToJumpMap = new Dictionary<int, int>(2) + { + { 0, 0 }, + { 100, 1 }, + }; + } + + public int Serialize(ref byte[] bytes, int offset, global::SharedData.IUnionSample value, global::MessagePack.IFormatterResolver formatterResolver) + { + KeyValuePair<int, int> keyValuePair; + if (value != null && this.typeToKeyAndJumpMap.TryGetValue(value.GetType().TypeHandle, out keyValuePair)) + { + var startOffset = offset; + offset += MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, keyValuePair.Key); + switch (keyValuePair.Value) + { + case 0: + offset += formatterResolver.GetFormatterWithVerify<global::SharedData.FooClass>().Serialize(ref bytes, offset, (global::SharedData.FooClass)value, formatterResolver); + break; + case 1: + offset += formatterResolver.GetFormatterWithVerify<global::SharedData.BarClass>().Serialize(ref bytes, offset, (global::SharedData.BarClass)value, formatterResolver); + break; + default: + break; + } + + return offset - startOffset; + } + + return MessagePackBinary.WriteNil(ref bytes, offset); + } + + public global::SharedData.IUnionSample Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + + if (MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize) != 2) + { + throw new InvalidOperationException("Invalid Union data was detected. Type:global::SharedData.IUnionSample"); + } + offset += readSize; + + var key = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + + if (!this.keyToJumpMap.TryGetValue(key, out key)) + { + key = -1; + } + + global::SharedData.IUnionSample result = null; + switch (key) + { + case 0: + result = (global::SharedData.IUnionSample)formatterResolver.GetFormatterWithVerify<global::SharedData.FooClass>().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + break; + case 1: + result = (global::SharedData.IUnionSample)formatterResolver.GetFormatterWithVerify<global::SharedData.BarClass>().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + break; + default: + offset += MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + + readSize = offset - startOffset; + + return result; + } + } + + +} + +#pragma warning disable 168 +#pragma warning restore 414 +#pragma warning restore 618 +#pragma warning restore 612 +#pragma warning disable 618 +#pragma warning disable 612 +#pragma warning disable 414 +#pragma warning disable 168 + +namespace MessagePack.Formatters +{ + using System; + using System.Collections.Generic; + using MessagePack; + + public sealed class IMessageBodyFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::IMessageBody> + { + readonly Dictionary<RuntimeTypeHandle, KeyValuePair<int, int>> typeToKeyAndJumpMap; + readonly Dictionary<int, int> keyToJumpMap; + + public IMessageBodyFormatter() + { + this.typeToKeyAndJumpMap = new Dictionary<RuntimeTypeHandle, KeyValuePair<int, int>>(3, global::MessagePack.Internal.RuntimeTypeHandleEqualityComparer.Default) + { + { typeof(global::TextMessageBody).TypeHandle, new KeyValuePair<int, int>(10, 0) }, + { typeof(global::StampMessageBody).TypeHandle, new KeyValuePair<int, int>(14, 1) }, + { typeof(global::QuestMessageBody).TypeHandle, new KeyValuePair<int, int>(25, 2) }, + }; + this.keyToJumpMap = new Dictionary<int, int>(3) + { + { 10, 0 }, + { 14, 1 }, + { 25, 2 }, + }; + } + + public int Serialize(ref byte[] bytes, int offset, global::IMessageBody value, global::MessagePack.IFormatterResolver formatterResolver) + { + KeyValuePair<int, int> keyValuePair; + if (value != null && this.typeToKeyAndJumpMap.TryGetValue(value.GetType().TypeHandle, out keyValuePair)) + { + var startOffset = offset; + offset += MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, keyValuePair.Key); + switch (keyValuePair.Value) + { + case 0: + offset += formatterResolver.GetFormatterWithVerify<global::TextMessageBody>().Serialize(ref bytes, offset, (global::TextMessageBody)value, formatterResolver); + break; + case 1: + offset += formatterResolver.GetFormatterWithVerify<global::StampMessageBody>().Serialize(ref bytes, offset, (global::StampMessageBody)value, formatterResolver); + break; + case 2: + offset += formatterResolver.GetFormatterWithVerify<global::QuestMessageBody>().Serialize(ref bytes, offset, (global::QuestMessageBody)value, formatterResolver); + break; + default: + break; + } + + return offset - startOffset; + } + + return MessagePackBinary.WriteNil(ref bytes, offset); + } + + public global::IMessageBody Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + + if (MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize) != 2) + { + throw new InvalidOperationException("Invalid Union data was detected. Type:global::IMessageBody"); + } + offset += readSize; + + var key = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + offset += readSize; + + if (!this.keyToJumpMap.TryGetValue(key, out key)) + { + key = -1; + } + + global::IMessageBody result = null; + switch (key) + { + case 0: + result = (global::IMessageBody)formatterResolver.GetFormatterWithVerify<global::TextMessageBody>().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + break; + case 1: + result = (global::IMessageBody)formatterResolver.GetFormatterWithVerify<global::StampMessageBody>().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + break; + case 2: + result = (global::IMessageBody)formatterResolver.GetFormatterWithVerify<global::QuestMessageBody>().Deserialize(bytes, offset, formatterResolver, out readSize); + offset += readSize; + break; + default: + offset += MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + + readSize = offset - startOffset; + + return result; + } + } + } @@ -608,7 +854,7 @@ namespace MessagePack.Formatters.SharedData var stringKey = global::MessagePack.MessagePackBinary.ReadString(bytes, offset, out readSize); offset += readSize; int key; - if (____keyMapping.TryGetValue(stringKey, out key)) + if (!____keyMapping.TryGetValue(stringKey, out key)) { readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); goto NEXT_LOOP; @@ -753,7 +999,7 @@ namespace MessagePack.Formatters.SharedData var stringKey = global::MessagePack.MessagePackBinary.ReadString(bytes, offset, out readSize); offset += readSize; int key; - if (____keyMapping.TryGetValue(stringKey, out key)) + if (!____keyMapping.TryGetValue(stringKey, out key)) { readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); goto NEXT_LOOP; @@ -1569,7 +1815,7 @@ namespace MessagePack.Formatters.SharedData var stringKey = global::MessagePack.MessagePackBinary.ReadString(bytes, offset, out readSize); offset += readSize; int key; - if (____keyMapping.TryGetValue(stringKey, out key)) + if (!____keyMapping.TryGetValue(stringKey, out key)) { readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); goto NEXT_LOOP; @@ -1642,7 +1888,7 @@ namespace MessagePack.Formatters.SharedData var stringKey = global::MessagePack.MessagePackBinary.ReadString(bytes, offset, out readSize); offset += readSize; int key; - if (____keyMapping.TryGetValue(stringKey, out key)) + if (!____keyMapping.TryGetValue(stringKey, out key)) { readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); goto NEXT_LOOP; @@ -2249,7 +2495,7 @@ namespace MessagePack.Formatters.SharedData var stringKey = global::MessagePack.MessagePackBinary.ReadString(bytes, offset, out readSize); offset += readSize; int key; - if (____keyMapping.TryGetValue(stringKey, out key)) + if (!____keyMapping.TryGetValue(stringKey, out key)) { readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); goto NEXT_LOOP; @@ -2376,7 +2622,7 @@ namespace MessagePack.Formatters.SharedData var stringKey = global::MessagePack.MessagePackBinary.ReadString(bytes, offset, out readSize); offset += readSize; int key; - if (____keyMapping.TryGetValue(stringKey, out key)) + if (!____keyMapping.TryGetValue(stringKey, out key)) { readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); goto NEXT_LOOP; @@ -2667,6 +2913,557 @@ namespace MessagePack.Formatters.SharedData } } + + public sealed class NestParent_NestContractFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::SharedData.NestParent.NestContract> + { + + public int Serialize(ref byte[] bytes, int offset, global::SharedData.NestParent.NestContract value, global::MessagePack.IFormatterResolver formatterResolver) + { + if (value == null) + { + return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); + } + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.MyProperty); + return offset - startOffset; + } + + public global::SharedData.NestParent.NestContract Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __MyProperty__ = default(int); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __MyProperty__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::SharedData.NestParent.NestContract(); + ____result.MyProperty = __MyProperty__; + return ____result; + } + } + + + public sealed class FooClassFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::SharedData.FooClass> + { + + public int Serialize(ref byte[] bytes, int offset, global::SharedData.FooClass value, global::MessagePack.IFormatterResolver formatterResolver) + { + if (value == null) + { + return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); + } + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.XYZ); + return offset - startOffset; + } + + public global::SharedData.FooClass Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __XYZ__ = default(int); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __XYZ__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::SharedData.FooClass(); + ____result.XYZ = __XYZ__; + return ____result; + } + } + + + public sealed class BarClassFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::SharedData.BarClass> + { + + public int Serialize(ref byte[] bytes, int offset, global::SharedData.BarClass value, global::MessagePack.IFormatterResolver formatterResolver) + { + if (value == null) + { + return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); + } + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1); + offset += formatterResolver.GetFormatterWithVerify<string>().Serialize(ref bytes, offset, value.OPQ, formatterResolver); + return offset - startOffset; + } + + public global::SharedData.BarClass Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __OPQ__ = default(string); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __OPQ__ = formatterResolver.GetFormatterWithVerify<string>().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::SharedData.BarClass(); + ____result.OPQ = __OPQ__; + return ____result; + } + } + +} + +#pragma warning disable 168 +#pragma warning restore 414 +#pragma warning restore 618 +#pragma warning restore 612 +#pragma warning disable 618 +#pragma warning disable 612 +#pragma warning disable 414 +#pragma warning disable 168 + +namespace MessagePack.Formatters.Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad +{ + using System; + using MessagePack; + + + public sealed class TnonodsfarnoiuAtatqagaFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga> + { + + public int Serialize(ref byte[] bytes, int offset, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga value, global::MessagePack.IFormatterResolver formatterResolver) + { + if (value == null) + { + return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); + } + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.MyProperty); + return offset - startOffset; + } + + public global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __MyProperty__ = default(int); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __MyProperty__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga(); + ____result.MyProperty = __MyProperty__; + return ____result; + } + } + +} + +#pragma warning disable 168 +#pragma warning restore 414 +#pragma warning restore 618 +#pragma warning restore 612 +#pragma warning disable 618 +#pragma warning disable 612 +#pragma warning disable 414 +#pragma warning disable 168 + +namespace MessagePack.Formatters +{ + using System; + using MessagePack; + + + public sealed class GlobalManFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::GlobalMan> + { + + public int Serialize(ref byte[] bytes, int offset, global::GlobalMan value, global::MessagePack.IFormatterResolver formatterResolver) + { + if (value == null) + { + return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); + } + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.MyProperty); + return offset - startOffset; + } + + public global::GlobalMan Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __MyProperty__ = default(int); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __MyProperty__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::GlobalMan(); + ____result.MyProperty = __MyProperty__; + return ____result; + } + } + + + public sealed class MessageFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::Message> + { + + public int Serialize(ref byte[] bytes, int offset, global::Message value, global::MessagePack.IFormatterResolver formatterResolver) + { + if (value == null) + { + return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); + } + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 4); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.UserId); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.RoomId); + offset += formatterResolver.GetFormatterWithVerify<global::System.DateTime>().Serialize(ref bytes, offset, value.PostTime, formatterResolver); + offset += formatterResolver.GetFormatterWithVerify<global::IMessageBody>().Serialize(ref bytes, offset, value.Body, formatterResolver); + return offset - startOffset; + } + + public global::Message Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __UserId__ = default(int); + var __RoomId__ = default(int); + var __PostTime__ = default(global::System.DateTime); + var __Body__ = default(global::IMessageBody); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __UserId__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + case 1: + __RoomId__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + case 2: + __PostTime__ = formatterResolver.GetFormatterWithVerify<global::System.DateTime>().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + case 3: + __Body__ = formatterResolver.GetFormatterWithVerify<global::IMessageBody>().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::Message(); + ____result.UserId = __UserId__; + ____result.RoomId = __RoomId__; + ____result.PostTime = __PostTime__; + ____result.Body = __Body__; + return ____result; + } + } + + + public sealed class TextMessageBodyFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::TextMessageBody> + { + + public int Serialize(ref byte[] bytes, int offset, global::TextMessageBody value, global::MessagePack.IFormatterResolver formatterResolver) + { + if (value == null) + { + return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); + } + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1); + offset += formatterResolver.GetFormatterWithVerify<string>().Serialize(ref bytes, offset, value.Text, formatterResolver); + return offset - startOffset; + } + + public global::TextMessageBody Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __Text__ = default(string); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __Text__ = formatterResolver.GetFormatterWithVerify<string>().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::TextMessageBody(); + ____result.Text = __Text__; + return ____result; + } + } + + + public sealed class StampMessageBodyFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::StampMessageBody> + { + + public int Serialize(ref byte[] bytes, int offset, global::StampMessageBody value, global::MessagePack.IFormatterResolver formatterResolver) + { + if (value == null) + { + return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); + } + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 1); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.StampId); + return offset - startOffset; + } + + public global::StampMessageBody Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __StampId__ = default(int); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __StampId__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::StampMessageBody(); + ____result.StampId = __StampId__; + return ____result; + } + } + + + public sealed class QuestMessageBodyFormatter : global::MessagePack.Formatters.IMessagePackFormatter<global::QuestMessageBody> + { + + public int Serialize(ref byte[] bytes, int offset, global::QuestMessageBody value, global::MessagePack.IFormatterResolver formatterResolver) + { + if (value == null) + { + return global::MessagePack.MessagePackBinary.WriteNil(ref bytes, offset); + } + + var startOffset = offset; + offset += global::MessagePack.MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); + offset += MessagePackBinary.WriteInt32(ref bytes, offset, value.QuestId); + offset += formatterResolver.GetFormatterWithVerify<string>().Serialize(ref bytes, offset, value.Text, formatterResolver); + return offset - startOffset; + } + + public global::QuestMessageBody Deserialize(byte[] bytes, int offset, global::MessagePack.IFormatterResolver formatterResolver, out int readSize) + { + if (global::MessagePack.MessagePackBinary.IsNil(bytes, offset)) + { + readSize = 1; + return null; + } + + var startOffset = offset; + var length = global::MessagePack.MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); + offset += readSize; + + var __QuestId__ = default(int); + var __Text__ = default(string); + + for (int i = 0; i < length; i++) + { + var key = i; + + switch (key) + { + case 0: + __QuestId__ = MessagePackBinary.ReadInt32(bytes, offset, out readSize); + break; + case 1: + __Text__ = formatterResolver.GetFormatterWithVerify<string>().Deserialize(bytes, offset, formatterResolver, out readSize); + break; + default: + readSize = global::MessagePack.MessagePackBinary.ReadNextBlock(bytes, offset); + break; + } + offset += readSize; + } + + readSize = offset - startOffset; + + var ____result = new global::QuestMessageBody(); + ____result.QuestId = __QuestId__; + ____result.Text = __Text__; + return ____result; + } + } + } #pragma warning disable 168 diff --git a/sandbox/Sandbox/Program.cs b/sandbox/Sandbox/Program.cs index ca9d35bc..5e2f9873 100644 --- a/sandbox/Sandbox/Program.cs +++ b/sandbox/Sandbox/Program.cs @@ -208,7 +208,7 @@ namespace Sandbox // mark inheritance types [MessagePack.Union(0, typeof(FooClass))] - [MessagePack.Union(1, typeof(BarClass))] + [MessagePack.Union(100, typeof(BarClass))] public interface IUnionSample { } @@ -232,29 +232,44 @@ namespace Sandbox { static void Main(string[] args) { - // composite same as StandardResolver CompositeResolver.RegisterAndSetAsDefault( - MessagePack.Resolvers.BuiltinResolver.Instance, + MessagePack.Resolvers.GeneratedResolver.Instance, + MessagePack.Resolvers.StandardResolver.Instance + ); - // replace enumasstring resolver - MessagePack.Resolvers.DynamicEnumAsStringResolver.Instance, + var foo = MessagePackSerializer.Serialize<IUnionSample>(new FooClass() { XYZ = 999 }); + var bar = MessagePackSerializer.Serialize<IUnionSample>(new BarClass() { OPQ = "hogemoge" }); - MessagePack.Resolvers.DynamicGenericResolver.Instance, - MessagePack.Resolvers.DynamicUnionResolver.Instance, - MessagePack.Resolvers.DynamicObjectResolver.Instance, + var f2 = MessagePackSerializer.Deserialize<IUnionSample>(foo); + var b2 = MessagePackSerializer.Deserialize<IUnionSample>(bar); + Console.WriteLine((f2 as FooClass).XYZ); + Console.WriteLine((b2 as BarClass).OPQ); - // final fallback(last priority) - MessagePack.Resolvers.DynamicContractlessObjectResolver.Instance - ); + + + //// composite same as StandardResolver + //CompositeResolver.RegisterAndSetAsDefault( + // MessagePack.Resolvers.BuiltinResolver.Instance, + + // // replace enumasstring resolver + // MessagePack.Resolvers.DynamicEnumAsStringResolver.Instance, + + // MessagePack.Resolvers.DynamicGenericResolver.Instance, + // MessagePack.Resolvers.DynamicUnionResolver.Instance, + // MessagePack.Resolvers.DynamicObjectResolver.Instance, + + // // final fallback(last priority) + // MessagePack.Resolvers.DynamicContractlessObjectResolver.Instance + //); - //var t = new DynamicArgumentTuple<global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga>(null, null, null, null, null, null, null, null, null); + ////var t = new DynamicArgumentTuple<global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga>(null, null, null, null, null, null, null, null, null); - var f = StandardResolver.Instance.GetFormatter<DynamicArgumentTuple<global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga>>(); + //var f = StandardResolver.Instance.GetFormatter<DynamicArgumentTuple<global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga, global::Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad.TnonodsfarnoiuAtatqaga>>(); - //var __request = MessagePackSerializer.Serialize(t); + // //var __request = MessagePackSerializer.Serialize(t); } diff --git a/sandbox/SharedData/Class1.cs b/sandbox/SharedData/Class1.cs index da9b7e03..9732f171 100644 --- a/sandbox/SharedData/Class1.cs +++ b/sandbox/SharedData/Class1.cs @@ -688,6 +688,26 @@ namespace SharedData public int MyProperty { get; set; } } } + + [MessagePack.Union(0, typeof(FooClass))] + [MessagePack.Union(100, typeof(BarClass))] + public interface IUnionSample + { + } + + [MessagePackObject] + public class FooClass : IUnionSample + { + [Key(0)] + public int XYZ { get; set; } + } + + [MessagePackObject] + public class BarClass : IUnionSample + { + [Key(0)] + public string OPQ { get; set; } + } } namespace Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad @@ -698,4 +718,60 @@ namespace Abcdefg.Efcdigjl.Ateatatea.Hgfagfafgad [Key(0)] public int MyProperty { get; set; } } +} + +[MessagePackObject] +public class GlobalMan +{ + [Key(0)] + public int MyProperty { get; set; } +} + +[MessagePackObject] +public class Message +{ + [Key(0)] + public int UserId { get; set; } + [Key(1)] + public int RoomId { get; set; } + [Key(2)] + public DateTime PostTime { get; set; } + + // 本文 + [Key(3)] + public IMessageBody Body { get; set; } +} + +[Union(10, typeof(TextMessageBody))] +[Union(14, typeof(StampMessageBody))] +[Union(25, typeof(QuestMessageBody))] +public interface IMessageBody { } + +[MessagePackObject] +public class TextMessageBody : IMessageBody +{ + [Key(0)] + public string Text { get; set; } +} + +[MessagePackObject] +public class StampMessageBody : IMessageBody +{ + [Key(0)] + public int StampId { get; set; } +} + +[MessagePackObject] +public class QuestMessageBody : IMessageBody +{ + [Key(0)] + public int QuestId { get; set; } + [Key(1)] + public string Text { get; set; } +} + + +public enum GlobalMyEnum +{ + Apple, Orange }
\ No newline at end of file diff --git a/sandbox/SharedData/SharedData.csproj b/sandbox/SharedData/SharedData.csproj index c8bdcfb8..ad9c1765 100644 --- a/sandbox/SharedData/SharedData.csproj +++ b/sandbox/SharedData/SharedData.csproj @@ -33,8 +33,17 @@ <Prefer32Bit>false</Prefer32Bit> </PropertyGroup> <ItemGroup> + <Reference Include="MessagePack, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> + <HintPath>..\..\packages\MessagePack.1.2.2\lib\net45\MessagePack.dll</HintPath> + </Reference> <Reference Include="System" /> <Reference Include="System.Core" /> + <Reference Include="System.Threading.Tasks.Extensions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> + <HintPath>..\..\packages\System.Threading.Tasks.Extensions.4.3.0\lib\portable-net45+win8+wp8+wpa81\System.Threading.Tasks.Extensions.dll</HintPath> + </Reference> + <Reference Include="System.ValueTuple, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> + <HintPath>..\..\packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath> + </Reference> <Reference Include="System.Xml.Linq" /> <Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data" /> @@ -45,10 +54,7 @@ <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> - <ProjectReference Include="..\..\src\MessagePack\MessagePack.csproj"> - <Project>{7abb33ee-a2f1-492b-8daf-5df89f0f0b79}</Project> - <Name>MessagePack</Name> - </ProjectReference> + <None Include="packages.config" /> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> </Project>
\ No newline at end of file diff --git a/sandbox/SharedData/packages.config b/sandbox/SharedData/packages.config new file mode 100644 index 00000000..9b66c2a1 --- /dev/null +++ b/sandbox/SharedData/packages.config @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="MessagePack" version="1.2.3" targetFramework="net461" /> + <package id="System.Threading.Tasks.Extensions" version="4.3.0" targetFramework="net461" /> + <package id="System.ValueTuple" version="4.3.0" targetFramework="net461" /> +</packages>
\ No newline at end of file diff --git a/src/MessagePack.CodeGenerator/CodeAnalysis/Definitions.cs b/src/MessagePack.CodeGenerator/CodeAnalysis/Definitions.cs index 07d56030..e754d576 100644 --- a/src/MessagePack.CodeGenerator/CodeAnalysis/Definitions.cs +++ b/src/MessagePack.CodeGenerator/CodeAnalysis/Definitions.cs @@ -26,7 +26,7 @@ namespace MessagePack.CodeGenerator public bool HasIMessagePackSerializationCallbackReceiver { get; set; } public bool NeedsCastOnBefore { get; set; } public bool NeedsCastOnAfter { get; set; } - public string FormatterName => Namespace + "." + Name + "Formatter"; + public string FormatterName => (Namespace == null ? Name : Namespace + "." + Name) + "Formatter"; public int WriteCount { @@ -126,7 +126,7 @@ namespace MessagePack.CodeGenerator public string FullName { get; set; } public string UnderlyingType { get; set; } - public string FormatterName => Namespace + "." + Name + "Formatter"; + public string FormatterName => (Namespace == null ? Name : Namespace + "." + Name) + "Formatter"; } public class GenericSerializationInfo : IResolverRegisterInfo, IEquatable<GenericSerializationInfo> @@ -151,7 +151,7 @@ namespace MessagePack.CodeGenerator public string Namespace { get; set; } public string Name { get; set; } public string FullName { get; set; } - public string FormatterName => Namespace + "." + Name + "Formatter"; + public string FormatterName => (Namespace == null ? Name : Namespace + "." + Name) + "Formatter"; public UnionSubTypeInfo[] SubTypes { get; set; } } diff --git a/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.cs b/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.cs index d52df307..22918bf3 100644 --- a/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.cs +++ b/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.cs @@ -160,7 +160,7 @@ namespace MessagePack.CodeGenerator.Generator this.Write(": return new "); #line 67 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\ResolverTemplate.tt" - this.Write(this.ToStringHelper.ToStringWithCulture(x.FormatterName.StartsWith("global::") ? x.FormatterName: FormatterNamespace + "." + x.FormatterName)); + this.Write(this.ToStringHelper.ToStringWithCulture(x.FormatterName.StartsWith("global::") ? x.FormatterName: (!string.IsNullOrEmpty(FormatterNamespace) ? FormatterNamespace + "." : FormatterNamespace) + x.FormatterName)); #line default #line hidden diff --git a/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.tt b/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.tt index 53877d23..b05afcea 100644 --- a/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.tt +++ b/src/MessagePack.CodeGenerator/Generator/ResolverTemplate.tt @@ -64,7 +64,7 @@ namespace <#= Namespace #> switch (key) { <# for(var i = 0; i < registerInfos.Length; i++) { var x = registerInfos[i]; #> - case <#= i #>: return new <#= x.FormatterName.StartsWith("global::") ? x.FormatterName: FormatterNamespace + "." + x.FormatterName#>(); + case <#= i #>: return new <#= x.FormatterName.StartsWith("global::") ? x.FormatterName: (!string.IsNullOrEmpty(FormatterNamespace) ? FormatterNamespace + "." : FormatterNamespace) + x.FormatterName#>(); <# } #> default: return null; } diff --git a/src/MessagePack.CodeGenerator/Generator/UnionTemplate.cs b/src/MessagePack.CodeGenerator/Generator/UnionTemplate.cs index edfe7d8c..6ca94e75 100644 --- a/src/MessagePack.CodeGenerator/Generator/UnionTemplate.cs +++ b/src/MessagePack.CodeGenerator/Generator/UnionTemplate.cs @@ -226,37 +226,38 @@ namespace MessagePack.CodeGenerator.Generator #line default #line hidden this.Write("\");\r\n\t\t\t}\r\n\t\t\toffset += readSize;\r\n\r\n\t\t\tvar key = MessagePackBinary.ReadInt32(byt" + - "es, offset, out readSize);\r\n\t\t\toffset += readSize;\r\n\r\n\t\t\t"); + "es, offset, out readSize);\r\n\t\t\toffset += readSize;\r\n\r\n if (!this.keyT" + + "oJumpMap.TryGetValue(key, out key))\r\n\t\t\t{\r\n\t\t\t\tkey = -1;\r\n\t\t\t}\r\n\r\n\t\t\t"); - #line 83 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" + #line 88 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" this.Write(this.ToStringHelper.ToStringWithCulture(info.FullName)); #line default #line hidden this.Write(" result = null;\r\n\t\t\tswitch (key)\r\n\t\t\t{\r\n"); - #line 86 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" + #line 91 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" for(var i = 0; i < info.SubTypes.Length; i++) { var item = info.SubTypes[i]; #line default #line hidden this.Write("\t\t\t\tcase "); - #line 87 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" + #line 92 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" this.Write(this.ToStringHelper.ToStringWithCulture(i)); #line default #line hidden this.Write(":\r\n\t\t\t\t\tresult = ("); - #line 88 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" + #line 93 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" this.Write(this.ToStringHelper.ToStringWithCulture(info.FullName)); #line default #line hidden this.Write(")formatterResolver.GetFormatterWithVerify<"); - #line 88 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" + #line 93 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" this.Write(this.ToStringHelper.ToStringWithCulture(item.Type)); #line default @@ -264,7 +265,7 @@ namespace MessagePack.CodeGenerator.Generator this.Write(">().Deserialize(bytes, offset, formatterResolver, out readSize);\r\n\t\t\t\t\toffset += " + "readSize;\r\n\t\t\t\t\tbreak;\r\n"); - #line 91 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" + #line 96 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" } #line default @@ -273,7 +274,7 @@ namespace MessagePack.CodeGenerator.Generator "\t\tbreak;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\treadSize = offset - startOffset;\r\n\t\t\t\r\n\t\t\treturn result;" + "\r\n }\r\n }\r\n\r\n"); - #line 103 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" + #line 108 "C:\Users\y.kawai\Documents\neuecc\MessagePack-CSharp\src\MessagePack.CodeGenerator\Generator\UnionTemplate.tt" } #line default diff --git a/src/MessagePack.CodeGenerator/Generator/UnionTemplate.tt b/src/MessagePack.CodeGenerator/Generator/UnionTemplate.tt index d150728f..5f9eca35 100644 --- a/src/MessagePack.CodeGenerator/Generator/UnionTemplate.tt +++ b/src/MessagePack.CodeGenerator/Generator/UnionTemplate.tt @@ -80,6 +80,11 @@ namespace <#= Namespace #> var key = MessagePackBinary.ReadInt32(bytes, offset, out readSize); offset += readSize; + if (!this.keyToJumpMap.TryGetValue(key, out key)) + { + key = -1; + } + <#= info.FullName #> result = null; switch (key) { diff --git a/src/MessagePack.CodeGenerator/Program.cs b/src/MessagePack.CodeGenerator/Program.cs index 48992e75..c53d9b91 100644 --- a/src/MessagePack.CodeGenerator/Program.cs +++ b/src/MessagePack.CodeGenerator/Program.cs @@ -103,7 +103,7 @@ namespace MessagePack.CodeGenerator .GroupBy(x => x.Namespace) .Select(x => new FormatterTemplate() { - Namespace = cmdArgs.GetNamespaceDot() + "Formatters." + x.Key, + Namespace = cmdArgs.GetNamespaceDot() + "Formatters" + ((x.Key == null) ? "" : "." + x.Key), objectSerializationInfos = x.ToArray(), }) .ToArray(); @@ -112,7 +112,7 @@ namespace MessagePack.CodeGenerator .GroupBy(x => x.Namespace) .Select(x => new EnumTemplate() { - Namespace = cmdArgs.GetNamespaceDot() + "Formatters." + x.Key, + Namespace = cmdArgs.GetNamespaceDot() + "Formatters" + ((x.Key == null) ? "" : "." + x.Key), enumSerializationInfos = x.ToArray() }) .ToArray(); @@ -121,7 +121,7 @@ namespace MessagePack.CodeGenerator .GroupBy(x => x.Namespace) .Select(x => new UnionTemplate() { - Namespace = cmdArgs.GetNamespaceDot() + "Formatters." + x.Key, + Namespace = cmdArgs.GetNamespaceDot() + "Formatters" + ((x.Key == null) ? "" : "." + x.Key), unionSerializationInfos = x.ToArray() }) .ToArray(); diff --git a/tests/MessagePack.Tests/UnionResolverTest.cs b/tests/MessagePack.Tests/UnionResolverTest.cs index 81ead7b7..e2b4f3da 100644 --- a/tests/MessagePack.Tests/UnionResolverTest.cs +++ b/tests/MessagePack.Tests/UnionResolverTest.cs @@ -66,6 +66,24 @@ namespace MessagePack.Tests convert2[0].IsInstanceOf<B2>().Is(x => x.Name == "b" && x.Val == 2); convert2[1].IsInstanceOf<C2>().Is(x => x.Name == "t" && x.Val == 5 && x.Valer == 99); } + + [Fact] + public void Union2() + { + + + var a = MessagePackSerializer.Serialize<IMessageBody>(new TextMessageBody() { Text = "hoge" }); + var b = MessagePackSerializer.Serialize<IMessageBody>(new StampMessageBody() { StampId = 10 }); + var c = MessagePackSerializer.Serialize<IMessageBody>(new QuestMessageBody() { Text = "hugahuga", QuestId = 99 }); + + var a2 = MessagePackSerializer.Deserialize<IMessageBody>(a); + var b2 = MessagePackSerializer.Deserialize<IMessageBody>(b); + var c2 = MessagePackSerializer.Deserialize<IMessageBody>(c); + + (a2 as TextMessageBody).Text.Is("hoge"); + (b2 as StampMessageBody).StampId.Is(10); + (c2 as QuestMessageBody).Is(x => x.Text == "hugahuga" && x.QuestId == 99); + } } } |