Aetheria/Assets/Scripts/NIH/MessagePack/MessagePack.ReactiveProperty/Formatters.cs
Reinier Vens a981a46170 Asteroid Belts
Sector renderer is now also rendering asteroid belts. All gravity calculations have been moved out of monobehaviors.
2020-11-29 22:50:12 +00:00

106 lines
3.3 KiB
C#

// Copyright (c) All contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Collections.Generic;
using MessagePack.Formatters;
using UniRx;
#pragma warning disable SA1649 // File name should match first type name
namespace MessagePack.ReactivePropertyExtension
{
public class ReactivePropertyFormatter<T> : IMessagePackFormatter<ReactiveProperty<T>>
{
public void Serialize(ref MessagePackWriter writer, ReactiveProperty<T> value, MessagePackSerializerOptions options)
{
if (value == null)
{
writer.WriteNil();
}
else
{
options.Resolver.GetFormatterWithVerify<T>().Serialize(ref writer, value.Value, options);
}
}
public ReactiveProperty<T> Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
{
if (reader.TryReadNil())
{
return null;
}
else
{
T v = options.Resolver.GetFormatterWithVerify<T>().Deserialize(ref reader, options);
return new ReactiveProperty<T>(v);
}
}
}
public class ReactiveCollectionFormatter<T> : CollectionFormatterBase<T, ReactiveCollection<T>>
{
protected override void Add(ReactiveCollection<T> collection, int index, T value, MessagePackSerializerOptions options)
{
collection.Add(value);
}
protected override ReactiveCollection<T> Create(int count, MessagePackSerializerOptions options)
{
return new ReactiveCollection<T>();
}
}
public class UnitFormatter : IMessagePackFormatter<Unit>
{
public static readonly UnitFormatter Instance = new UnitFormatter();
private UnitFormatter()
{
}
public void Serialize(ref MessagePackWriter writer, Unit value, MessagePackSerializerOptions options)
{
writer.WriteNil();
}
public Unit Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
{
if (reader.TryReadNil())
{
return Unit.Default;
}
else
{
throw new InvalidOperationException("Invalid Data type. Code: " + MessagePackCode.ToFormatName(reader.NextCode));
}
}
}
public class NullableUnitFormatter : IMessagePackFormatter<Unit?>
{
public static readonly NullableUnitFormatter Instance = new NullableUnitFormatter();
private NullableUnitFormatter()
{
}
public void Serialize(ref MessagePackWriter writer, Unit? value, MessagePackSerializerOptions options)
{
writer.WriteNil();
}
public Unit? Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
{
if (reader.TryReadNil())
{
return Unit.Default;
}
else
{
throw new InvalidOperationException("Invalid Data type. Code: " + MessagePackCode.ToFormatName(reader.NextCode));
}
}
}
}