68 lines
2.1 KiB
C#
68 lines
2.1 KiB
C#
|
|
using System.Diagnostics.CodeAnalysis;
|
|
|
|
namespace Dashboard.ImmediateDraw
|
|
{
|
|
public interface IDrawListSerializable { }
|
|
|
|
/// <summary>
|
|
/// Interface for objects that can be serialized into the Dashboard command stream.
|
|
/// </summary>
|
|
public interface IDrawListSerializable<T> : IDrawListSerializable
|
|
{
|
|
/// <summary>
|
|
/// Seralize object.
|
|
/// </summary>
|
|
/// <param name="list">The object to serialize into.</param>
|
|
void Serialize(DrawList list);
|
|
|
|
/// <summary>
|
|
/// Deserialize object.
|
|
/// </summary>
|
|
/// <param name="queue">The command queue to deserialize from.</param>
|
|
void Deserialize(DrawQueue queue);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Base interface for all Command List serializers.
|
|
/// </summary>
|
|
public interface IDrawListSerializer { }
|
|
|
|
public interface IDrawListSerializer<T> : IDrawListSerializer
|
|
{
|
|
/// <summary>
|
|
/// Serialize an object into the command list.
|
|
/// </summary>
|
|
/// <param name="value">The object to serialize.</param>
|
|
/// <param name="list">The command list to serialize into.</param>
|
|
void Serialize(T value, DrawList list);
|
|
|
|
/// <summary>
|
|
/// Deserialize an object from the command queue.
|
|
/// </summary>
|
|
/// <param name="queue">The command queue.</param>
|
|
/// <returns>The object deserialized from the command queue.</returns>
|
|
[return: NotNull]
|
|
T Deserialize(DrawQueue queue);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Class for automatic serialization of <see cref="IDrawListSerializable"/> objects.
|
|
/// </summary>
|
|
/// <typeparam name="T">The object type to convert.</typeparam>
|
|
internal class DrawListSerializableSerializer<T> : IDrawListSerializer<T>
|
|
where T : IDrawListSerializable<T>, new()
|
|
{
|
|
public T Deserialize(DrawQueue queue)
|
|
{
|
|
T value = new T();
|
|
value.Deserialize(queue);
|
|
return value;
|
|
}
|
|
|
|
public void Serialize(T value, DrawList list)
|
|
{
|
|
value.Serialize(list);
|
|
}
|
|
}
|
|
} |