Files
tbd-station-14/Content.Shared/Construction/ConstructionGraphStepTypeSerializer.cs
DrSmugleaf 055279f86c Update serialization markdown usages (#3931)
* Update serialization markdown usages

* test submodule update

* Revert "test submodule update"

This reverts commit c240ca312a44365fa1aa0a7df4915434dff10bfc.
2021-05-04 13:30:38 +02:00

77 lines
2.6 KiB
C#

#nullable enable
using System;
using Robust.Shared.IoC;
using Robust.Shared.Serialization.Manager;
using Robust.Shared.Serialization.Manager.Attributes;
using Robust.Shared.Serialization.Manager.Result;
using Robust.Shared.Serialization.Markdown.Mapping;
using Robust.Shared.Serialization.Markdown.Validation;
using Robust.Shared.Serialization.TypeSerializers.Interfaces;
namespace Content.Shared.Construction
{
[TypeSerializer]
public class ConstructionGraphStepTypeSerializer : ITypeReader<ConstructionGraphStep, MappingDataNode>
{
private Type? GetType(MappingDataNode node)
{
if (node.Has("material"))
{
return typeof(MaterialConstructionGraphStep);
}
else if (node.Has("tool"))
{
return typeof(ToolConstructionGraphStep);
}
else if (node.Has("prototype"))
{
return typeof(PrototypeConstructionGraphStep);
}
else if (node.Has("component"))
{
return typeof(ComponentConstructionGraphStep);
}
else if (node.Has("tag"))
{
return typeof(TagConstructionGraphStep);
}
else if (node.Has("allTags") || node.Has("anyTags"))
{
return typeof(MultipleTagsConstructionGraphStep);
}
else if (node.Has("steps"))
{
return typeof(NestedConstructionGraphStep);
}
else
{
return null;
}
}
public DeserializationResult Read(ISerializationManager serializationManager,
MappingDataNode node,
IDependencyCollection dependencies,
bool skipHook,
ISerializationContext? context = null)
{
var type = GetType(node) ??
throw new ArgumentException(
"Tried to convert invalid YAML node mapping to ConstructionGraphStep!");
return serializationManager.Read(type, node, context, skipHook);
}
public ValidationNode Validate(ISerializationManager serializationManager, MappingDataNode node,
IDependencyCollection dependencies,
ISerializationContext? context = null)
{
var type = GetType(node);
if (type == null) return new ErrorNode(node, "No construction graph step type found.", true);
return serializationManager.ValidateNode(type, node, context);
}
}
}