mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-16 15:22:27 +02:00
Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
74 lines
2.5 KiB
C#
74 lines
2.5 KiB
C#
using System.Collections.Generic;
|
|
|
|
namespace Robust.Shared.Serialization.Manager.Result
|
|
{
|
|
public sealed class DeserializedCollection<TCollection, TElement> : DeserializationResult<TCollection> where TCollection : IReadOnlyCollection<TElement>
|
|
{
|
|
public delegate TCollection Create(List<TElement> elements);
|
|
|
|
public DeserializedCollection(
|
|
TCollection value,
|
|
IEnumerable<DeserializationResult> mappings,
|
|
Create createDelegate)
|
|
{
|
|
Value = value;
|
|
Mappings = mappings;
|
|
CreateDelegate = createDelegate;
|
|
}
|
|
|
|
public override TCollection Value { get; }
|
|
|
|
public IEnumerable<DeserializationResult> Mappings { get; }
|
|
|
|
public override object RawValue => Value;
|
|
|
|
private Create CreateDelegate { get; }
|
|
|
|
public override DeserializationResult PushInheritanceFrom(DeserializationResult source)
|
|
{
|
|
var sourceCollection = source.Cast<DeserializedCollection<TCollection, TElement>>();
|
|
var valueList = new List<TElement>();
|
|
var resList = new List<DeserializationResult>();
|
|
|
|
foreach (var oldRes in sourceCollection.Mappings)
|
|
{
|
|
var newRes = oldRes.Copy().Cast<DeserializationResult<TElement>>();
|
|
valueList.Add(newRes.Value!);
|
|
resList.Add(newRes);
|
|
}
|
|
|
|
foreach (var oldRes in Mappings)
|
|
{
|
|
var newRes = oldRes.Copy().Cast<DeserializationResult<TElement>>();
|
|
valueList.Add(newRes.Value!);
|
|
resList.Add(newRes);
|
|
}
|
|
|
|
return new DeserializedCollection<TCollection, TElement>(CreateDelegate(valueList), resList, CreateDelegate);
|
|
}
|
|
|
|
public override DeserializationResult Copy()
|
|
{
|
|
var valueList = new List<TElement>();
|
|
var resList = new List<DeserializationResult>();
|
|
|
|
foreach (var oldRes in Mappings)
|
|
{
|
|
var newRes = oldRes.Copy();
|
|
valueList.Add((TElement) newRes.RawValue!);
|
|
resList.Add(newRes);
|
|
}
|
|
|
|
return new DeserializedCollection<TCollection, TElement>(CreateDelegate(valueList), resList, CreateDelegate);
|
|
}
|
|
|
|
public override void CallAfterDeserializationHook()
|
|
{
|
|
foreach (var val in Mappings)
|
|
{
|
|
val.CallAfterDeserializationHook();
|
|
}
|
|
}
|
|
}
|
|
}
|