DiscriminatedUnion.Serializable.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #if PLAT_BINARYFORMATTER
  2. using System;
  3. using System.Runtime.InteropServices;
  4. using System.Runtime.Serialization;
  5. namespace ProtoBuf
  6. {
  7. [Serializable]
  8. public readonly partial struct DiscriminatedUnionObject : ISerializable
  9. {
  10. void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
  11. {
  12. if (Discriminator != default) info.AddValue("d", Discriminator);
  13. if (Object is object) info.AddValue("o", Object);
  14. }
  15. private DiscriminatedUnionObject(SerializationInfo info, StreamingContext context)
  16. {
  17. this = default;
  18. foreach (var field in info)
  19. {
  20. switch (field.Name)
  21. {
  22. case "d": Discriminator = (int)field.Value; break;
  23. case "o": Object = field.Value; break;
  24. }
  25. }
  26. }
  27. }
  28. [Serializable]
  29. public readonly partial struct DiscriminatedUnion128Object : ISerializable
  30. {
  31. [FieldOffset(8)] private readonly long _lo;
  32. [FieldOffset(16)] private readonly long _hi;
  33. void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
  34. {
  35. if (_discriminator != default) info.AddValue("d", _discriminator);
  36. if (_lo != default) info.AddValue("l", _lo);
  37. if (_hi != default) info.AddValue("h", _hi);
  38. if (Object != null) info.AddValue("o", Object);
  39. }
  40. private DiscriminatedUnion128Object(SerializationInfo info, StreamingContext context)
  41. {
  42. this = default;
  43. foreach (var field in info)
  44. {
  45. switch (field.Name)
  46. {
  47. case "d": _discriminator = (int)field.Value; break;
  48. case "l": _lo = (long)field.Value; break;
  49. case "h": _hi = (long)field.Value; break;
  50. case "o": Object = field.Value; break;
  51. }
  52. }
  53. }
  54. }
  55. [Serializable]
  56. public readonly partial struct DiscriminatedUnion128 : ISerializable
  57. {
  58. [FieldOffset(8)] private readonly long _lo;
  59. [FieldOffset(16)] private readonly long _hi;
  60. void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
  61. {
  62. if (_discriminator != default) info.AddValue("d", _discriminator);
  63. if (_lo != default) info.AddValue("l", _lo);
  64. if (_hi != default) info.AddValue("h", _hi);
  65. }
  66. private DiscriminatedUnion128(SerializationInfo info, StreamingContext context)
  67. {
  68. this = default;
  69. foreach (var field in info)
  70. {
  71. switch (field.Name)
  72. {
  73. case "d": _discriminator = (int)field.Value; break;
  74. case "l": _lo = (long)field.Value; break;
  75. case "h": _hi = (long)field.Value; break;
  76. }
  77. }
  78. }
  79. }
  80. [Serializable]
  81. public readonly partial struct DiscriminatedUnion64 : ISerializable
  82. {
  83. void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
  84. {
  85. if (_discriminator != default) info.AddValue("d", _discriminator);
  86. if (Int64 != default) info.AddValue("i", Int64);
  87. }
  88. private DiscriminatedUnion64(SerializationInfo info, StreamingContext context)
  89. {
  90. this = default;
  91. foreach (var field in info)
  92. {
  93. switch (field.Name)
  94. {
  95. case "d": _discriminator = (int)field.Value; break;
  96. case "i": Int64 = (long)field.Value; break;
  97. }
  98. }
  99. }
  100. }
  101. [Serializable]
  102. public readonly partial struct DiscriminatedUnion64Object : ISerializable
  103. {
  104. void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
  105. {
  106. if (_discriminator != default) info.AddValue("d", _discriminator);
  107. if (Int64 != default) info.AddValue("i", Int64);
  108. if (Object is object) info.AddValue("o", Object);
  109. }
  110. private DiscriminatedUnion64Object(SerializationInfo info, StreamingContext context)
  111. {
  112. this = default;
  113. foreach (var field in info)
  114. {
  115. switch (field.Name)
  116. {
  117. case "d": _discriminator = (int)field.Value; break;
  118. case "i": Int64 = (long)field.Value; break;
  119. case "o": Object = field.Value; break;
  120. }
  121. }
  122. }
  123. }
  124. [Serializable]
  125. public readonly partial struct DiscriminatedUnion32 : ISerializable
  126. {
  127. void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
  128. {
  129. if (_discriminator != default) info.AddValue("d", _discriminator);
  130. if (Int32 != default) info.AddValue("i", Int32);
  131. }
  132. private DiscriminatedUnion32(SerializationInfo info, StreamingContext context)
  133. {
  134. this = default;
  135. foreach (var field in info)
  136. {
  137. switch (field.Name)
  138. {
  139. case "d": _discriminator = (int)field.Value; break;
  140. case "i": Int32 = (int)field.Value; break;
  141. }
  142. }
  143. }
  144. }
  145. [Serializable]
  146. public readonly partial struct DiscriminatedUnion32Object : ISerializable
  147. {
  148. void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
  149. {
  150. if (_discriminator != default) info.AddValue("d", _discriminator);
  151. if (Int32 != default) info.AddValue("i", Int32);
  152. if (Object is object) info.AddValue("o", Object);
  153. }
  154. private DiscriminatedUnion32Object(SerializationInfo info, StreamingContext context)
  155. {
  156. this = default;
  157. foreach (var field in info)
  158. {
  159. switch (field.Name)
  160. {
  161. case "d": _discriminator = (int)field.Value; break;
  162. case "i": Int32 = (int)field.Value; break;
  163. case "o": Object = field.Value; break;
  164. }
  165. }
  166. }
  167. }
  168. }
  169. #endif