You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
371 lines
20 KiB
371 lines
20 KiB
3 years ago
|
#if NETSTANDARD
|
||
|
using System;
|
||
|
|
||
|
namespace MessagePack.Formatters
|
||
|
{
|
||
|
|
||
|
public sealed class ValueTupleFormatter<T1> : IMessagePackFormatter<ValueTuple<T1>>
|
||
|
{
|
||
|
public int Serialize(ref byte[] bytes, int offset, ValueTuple<T1> value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 1);
|
||
|
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T1>().Serialize(ref bytes, offset, value.Item1, formatterResolver);
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
|
||
|
public ValueTuple<T1> Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
throw new InvalidOperationException("Data is Nil, ValueTuple can not be null.");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
if (count != 1) throw new InvalidOperationException("Invalid ValueTuple count");
|
||
|
offset += readSize;
|
||
|
|
||
|
var item1 = formatterResolver.GetFormatterWithVerify<T1>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
|
||
|
readSize = offset - startOffset;
|
||
|
return new ValueTuple<T1>(item1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public sealed class ValueTupleFormatter<T1, T2> : IMessagePackFormatter<ValueTuple<T1, T2>>
|
||
|
{
|
||
|
public int Serialize(ref byte[] bytes, int offset, ValueTuple<T1, T2> value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 2);
|
||
|
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T1>().Serialize(ref bytes, offset, value.Item1, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T2>().Serialize(ref bytes, offset, value.Item2, formatterResolver);
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
|
||
|
public ValueTuple<T1, T2> Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
throw new InvalidOperationException("Data is Nil, ValueTuple can not be null.");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
if (count != 2) throw new InvalidOperationException("Invalid ValueTuple count");
|
||
|
offset += readSize;
|
||
|
|
||
|
var item1 = formatterResolver.GetFormatterWithVerify<T1>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item2 = formatterResolver.GetFormatterWithVerify<T2>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
|
||
|
readSize = offset - startOffset;
|
||
|
return new ValueTuple<T1, T2>(item1, item2);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public sealed class ValueTupleFormatter<T1, T2, T3> : IMessagePackFormatter<ValueTuple<T1, T2, T3>>
|
||
|
{
|
||
|
public int Serialize(ref byte[] bytes, int offset, ValueTuple<T1, T2, T3> value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 3);
|
||
|
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T1>().Serialize(ref bytes, offset, value.Item1, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T2>().Serialize(ref bytes, offset, value.Item2, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T3>().Serialize(ref bytes, offset, value.Item3, formatterResolver);
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
|
||
|
public ValueTuple<T1, T2, T3> Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
throw new InvalidOperationException("Data is Nil, ValueTuple can not be null.");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
if (count != 3) throw new InvalidOperationException("Invalid ValueTuple count");
|
||
|
offset += readSize;
|
||
|
|
||
|
var item1 = formatterResolver.GetFormatterWithVerify<T1>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item2 = formatterResolver.GetFormatterWithVerify<T2>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item3 = formatterResolver.GetFormatterWithVerify<T3>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
|
||
|
readSize = offset - startOffset;
|
||
|
return new ValueTuple<T1, T2, T3>(item1, item2, item3);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public sealed class ValueTupleFormatter<T1, T2, T3, T4> : IMessagePackFormatter<ValueTuple<T1, T2, T3, T4>>
|
||
|
{
|
||
|
public int Serialize(ref byte[] bytes, int offset, ValueTuple<T1, T2, T3, T4> value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 4);
|
||
|
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T1>().Serialize(ref bytes, offset, value.Item1, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T2>().Serialize(ref bytes, offset, value.Item2, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T3>().Serialize(ref bytes, offset, value.Item3, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T4>().Serialize(ref bytes, offset, value.Item4, formatterResolver);
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
|
||
|
public ValueTuple<T1, T2, T3, T4> Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
throw new InvalidOperationException("Data is Nil, ValueTuple can not be null.");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
if (count != 4) throw new InvalidOperationException("Invalid ValueTuple count");
|
||
|
offset += readSize;
|
||
|
|
||
|
var item1 = formatterResolver.GetFormatterWithVerify<T1>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item2 = formatterResolver.GetFormatterWithVerify<T2>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item3 = formatterResolver.GetFormatterWithVerify<T3>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item4 = formatterResolver.GetFormatterWithVerify<T4>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
|
||
|
readSize = offset - startOffset;
|
||
|
return new ValueTuple<T1, T2, T3, T4>(item1, item2, item3, item4);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public sealed class ValueTupleFormatter<T1, T2, T3, T4, T5> : IMessagePackFormatter<ValueTuple<T1, T2, T3, T4, T5>>
|
||
|
{
|
||
|
public int Serialize(ref byte[] bytes, int offset, ValueTuple<T1, T2, T3, T4, T5> value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 5);
|
||
|
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T1>().Serialize(ref bytes, offset, value.Item1, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T2>().Serialize(ref bytes, offset, value.Item2, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T3>().Serialize(ref bytes, offset, value.Item3, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T4>().Serialize(ref bytes, offset, value.Item4, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T5>().Serialize(ref bytes, offset, value.Item5, formatterResolver);
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
|
||
|
public ValueTuple<T1, T2, T3, T4, T5> Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
throw new InvalidOperationException("Data is Nil, ValueTuple can not be null.");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
if (count != 5) throw new InvalidOperationException("Invalid ValueTuple count");
|
||
|
offset += readSize;
|
||
|
|
||
|
var item1 = formatterResolver.GetFormatterWithVerify<T1>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item2 = formatterResolver.GetFormatterWithVerify<T2>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item3 = formatterResolver.GetFormatterWithVerify<T3>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item4 = formatterResolver.GetFormatterWithVerify<T4>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item5 = formatterResolver.GetFormatterWithVerify<T5>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
|
||
|
readSize = offset - startOffset;
|
||
|
return new ValueTuple<T1, T2, T3, T4, T5>(item1, item2, item3, item4, item5);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public sealed class ValueTupleFormatter<T1, T2, T3, T4, T5, T6> : IMessagePackFormatter<ValueTuple<T1, T2, T3, T4, T5, T6>>
|
||
|
{
|
||
|
public int Serialize(ref byte[] bytes, int offset, ValueTuple<T1, T2, T3, T4, T5, T6> value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 6);
|
||
|
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T1>().Serialize(ref bytes, offset, value.Item1, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T2>().Serialize(ref bytes, offset, value.Item2, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T3>().Serialize(ref bytes, offset, value.Item3, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T4>().Serialize(ref bytes, offset, value.Item4, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T5>().Serialize(ref bytes, offset, value.Item5, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T6>().Serialize(ref bytes, offset, value.Item6, formatterResolver);
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
|
||
|
public ValueTuple<T1, T2, T3, T4, T5, T6> Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
throw new InvalidOperationException("Data is Nil, ValueTuple can not be null.");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
if (count != 6) throw new InvalidOperationException("Invalid ValueTuple count");
|
||
|
offset += readSize;
|
||
|
|
||
|
var item1 = formatterResolver.GetFormatterWithVerify<T1>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item2 = formatterResolver.GetFormatterWithVerify<T2>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item3 = formatterResolver.GetFormatterWithVerify<T3>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item4 = formatterResolver.GetFormatterWithVerify<T4>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item5 = formatterResolver.GetFormatterWithVerify<T5>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item6 = formatterResolver.GetFormatterWithVerify<T6>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
|
||
|
readSize = offset - startOffset;
|
||
|
return new ValueTuple<T1, T2, T3, T4, T5, T6>(item1, item2, item3, item4, item5, item6);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public sealed class ValueTupleFormatter<T1, T2, T3, T4, T5, T6, T7> : IMessagePackFormatter<ValueTuple<T1, T2, T3, T4, T5, T6, T7>>
|
||
|
{
|
||
|
public int Serialize(ref byte[] bytes, int offset, ValueTuple<T1, T2, T3, T4, T5, T6, T7> value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 7);
|
||
|
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T1>().Serialize(ref bytes, offset, value.Item1, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T2>().Serialize(ref bytes, offset, value.Item2, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T3>().Serialize(ref bytes, offset, value.Item3, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T4>().Serialize(ref bytes, offset, value.Item4, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T5>().Serialize(ref bytes, offset, value.Item5, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T6>().Serialize(ref bytes, offset, value.Item6, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T7>().Serialize(ref bytes, offset, value.Item7, formatterResolver);
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
|
||
|
public ValueTuple<T1, T2, T3, T4, T5, T6, T7> Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
throw new InvalidOperationException("Data is Nil, ValueTuple can not be null.");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
if (count != 7) throw new InvalidOperationException("Invalid ValueTuple count");
|
||
|
offset += readSize;
|
||
|
|
||
|
var item1 = formatterResolver.GetFormatterWithVerify<T1>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item2 = formatterResolver.GetFormatterWithVerify<T2>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item3 = formatterResolver.GetFormatterWithVerify<T3>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item4 = formatterResolver.GetFormatterWithVerify<T4>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item5 = formatterResolver.GetFormatterWithVerify<T5>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item6 = formatterResolver.GetFormatterWithVerify<T6>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item7 = formatterResolver.GetFormatterWithVerify<T7>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
|
||
|
readSize = offset - startOffset;
|
||
|
return new ValueTuple<T1, T2, T3, T4, T5, T6, T7>(item1, item2, item3, item4, item5, item6, item7);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public sealed class ValueTupleFormatter<T1, T2, T3, T4, T5, T6, T7, TRest> : IMessagePackFormatter<ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>> where TRest : struct
|
||
|
{
|
||
|
public int Serialize(ref byte[] bytes, int offset, ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest> value, IFormatterResolver formatterResolver)
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
offset += MessagePackBinary.WriteArrayHeader(ref bytes, offset, 8);
|
||
|
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T1>().Serialize(ref bytes, offset, value.Item1, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T2>().Serialize(ref bytes, offset, value.Item2, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T3>().Serialize(ref bytes, offset, value.Item3, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T4>().Serialize(ref bytes, offset, value.Item4, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T5>().Serialize(ref bytes, offset, value.Item5, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T6>().Serialize(ref bytes, offset, value.Item6, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<T7>().Serialize(ref bytes, offset, value.Item7, formatterResolver);
|
||
|
offset += formatterResolver.GetFormatterWithVerify<TRest>().Serialize(ref bytes, offset, value.Rest, formatterResolver);
|
||
|
|
||
|
return offset - startOffset;
|
||
|
}
|
||
|
|
||
|
public ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest> Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize)
|
||
|
{
|
||
|
if (MessagePackBinary.IsNil(bytes, offset))
|
||
|
{
|
||
|
throw new InvalidOperationException("Data is Nil, ValueTuple can not be null.");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
var startOffset = offset;
|
||
|
var count = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize);
|
||
|
if (count != 8) throw new InvalidOperationException("Invalid ValueTuple count");
|
||
|
offset += readSize;
|
||
|
|
||
|
var item1 = formatterResolver.GetFormatterWithVerify<T1>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item2 = formatterResolver.GetFormatterWithVerify<T2>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item3 = formatterResolver.GetFormatterWithVerify<T3>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item4 = formatterResolver.GetFormatterWithVerify<T4>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item5 = formatterResolver.GetFormatterWithVerify<T5>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item6 = formatterResolver.GetFormatterWithVerify<T6>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item7 = formatterResolver.GetFormatterWithVerify<T7>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
var item8 = formatterResolver.GetFormatterWithVerify<TRest>().Deserialize(bytes, offset, formatterResolver, out readSize);
|
||
|
offset += readSize;
|
||
|
|
||
|
readSize = offset - startOffset;
|
||
|
return new ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>(item1, item2, item3, item4, item5, item6, item7, item8);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
#endif
|