public ReactiveProperty <T> Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options) { if (reader.TryReadNil()) { return(null); } else { var length = reader.ReadArrayHeader(); if (length != 3) { throw new InvalidOperationException("Invalid ReactiveProperty data."); } var mode = (ReactivePropertyMode)reader.ReadInt32(); var schedulerId = reader.ReadInt32(); IScheduler scheduler = ReactivePropertySchedulerMapper.GetScheduler(schedulerId); T v = options.Resolver.GetFormatterWithVerify <T>().Deserialize(ref reader, options); return(new ReactiveProperty <T>(scheduler, v, mode)); } }
public ReactiveProperty <T> Deserialize(byte[] bytes, int offset, IFormatterResolver formatterResolver, out int readSize) { if (MessagePackBinary.IsNil(bytes, offset)) { readSize = 1; return(null); } else { var startOffset = offset; var length = MessagePackBinary.ReadArrayHeader(bytes, offset, out readSize); offset += readSize; if (length != 3) { throw new InvalidOperationException("Invalid ReactiveProperty data."); } var mode = (ReactivePropertyMode)MessagePackBinary.ReadInt32(bytes, offset, out readSize); offset += readSize; var schedulerId = MessagePackBinary.ReadInt32(bytes, offset, out readSize); offset += readSize; var scheduler = ReactivePropertySchedulerMapper.GetScheduler(schedulerId); var v = formatterResolver.GetFormatterWithVerify <T>().Deserialize(bytes, offset, formatterResolver, out readSize); offset += readSize; readSize = offset - startOffset; return(new ReactiveProperty <T>(scheduler, v, mode)); } }
public void Serialize(ref MessagePackWriter writer, ReactivePropertySlim <T> value, MessagePackSerializerOptions options) { if (value == null) { writer.WriteNil(); } else { writer.WriteArrayHeader(2); writer.Write(ReactivePropertySchedulerMapper.ToReactivePropertySlimModeInt(value)); options.Resolver.GetFormatterWithVerify <T>().Serialize(ref writer, value.Value, options); } }
public void Serialize(ref MessagePackWriter writer, ReactiveProperty <T> value, IFormatterResolver formatterResolver) { if (value == null) { writer.WriteNil(); } else { writer.WriteArrayHeader(3); writer.Write(ReactivePropertySchedulerMapper.ToReactivePropertyModeInt(value)); writer.Write(ReactivePropertySchedulerMapper.GetSchedulerId(value.RaiseEventScheduler)); formatterResolver.GetFormatterWithVerify <T>().Serialize(ref writer, value.Value, formatterResolver); } }
public int Serialize(ref byte[] bytes, int offset, ReactivePropertySlim <T> value, IFormatterResolver formatterResolver) { if (value == null) { return(MessagePackBinary.WriteNil(ref bytes, offset)); } else { var startOffset = offset; offset += MessagePackBinary.WriteFixedArrayHeaderUnsafe(ref bytes, offset, 2); offset += MessagePackBinary.WriteInt32(ref bytes, offset, ReactivePropertySchedulerMapper.ToReactivePropertySlimModeInt(value)); offset += formatterResolver.GetFormatterWithVerify <T>().Serialize(ref bytes, offset, value.Value, formatterResolver); return(offset - startOffset); } }