mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-02-14 19:29:36 +01:00
Merge branch 'serialization_v3_nodataclasses' of https://github.com/PaulRitter/RobustToolbox into serv3
This commit is contained in:
@@ -34,7 +34,7 @@ namespace Robust.Client.Serialization
|
||||
return serializationManager.Read(type, newNode, context, skipHook);
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, MappingDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, MappingDataNode node,
|
||||
ISerializationContext? context)
|
||||
{
|
||||
if (!node.TryGetNode("type", out var typeNode) || typeNode is not ValueDataNode valueNode)
|
||||
|
||||
@@ -860,7 +860,7 @@ namespace Robust.Server.Maps
|
||||
return new DeserializedValue<GridId>(GridId.Invalid);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<IEntity, ValueDataNode>.Validate(ISerializationManager serializationManager,
|
||||
ValidationNode ITypeReader<IEntity, ValueDataNode>.Validate(ISerializationManager serializationManager,
|
||||
ValueDataNode node, ISerializationContext? context)
|
||||
{
|
||||
if (!int.TryParse(node.Value, out var val) || val >= Entities.Count)
|
||||
@@ -871,7 +871,7 @@ namespace Robust.Server.Maps
|
||||
return new ValidatedValueNode(node);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<EntityUid, ValueDataNode>.Validate(ISerializationManager serializationManager,
|
||||
ValidationNode ITypeReader<EntityUid, ValueDataNode>.Validate(ISerializationManager serializationManager,
|
||||
ValueDataNode node, ISerializationContext? context)
|
||||
{
|
||||
if (node.Value == "null")
|
||||
@@ -887,7 +887,7 @@ namespace Robust.Server.Maps
|
||||
return new ValidatedValueNode(node);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<GridId, ValueDataNode>.Validate(ISerializationManager serializationManager,
|
||||
ValidationNode ITypeReader<GridId, ValueDataNode>.Validate(ISerializationManager serializationManager,
|
||||
ValueDataNode node, ISerializationContext? context)
|
||||
{
|
||||
if (node.Value == "null") return new ValidatedValueNode(node);
|
||||
|
||||
@@ -71,7 +71,7 @@ namespace Robust.Shared.Prototypes
|
||||
/// </summary>
|
||||
List<IPrototype> LoadDirectory(ResourcePath path);
|
||||
|
||||
Dictionary<Type, List<(string file, ValidatedNode node)>> ValidateDirectory(ResourcePath path);
|
||||
Dictionary<string, HashSet<ErrorNode>> ValidateDirectory(ResourcePath path);
|
||||
|
||||
List<IPrototype> LoadFromStream(TextReader stream);
|
||||
|
||||
@@ -341,12 +341,12 @@ namespace Robust.Shared.Prototypes
|
||||
return changedPrototypes;
|
||||
}
|
||||
|
||||
public Dictionary<Type, List<(string file, ValidatedNode node)>> ValidateDirectory(ResourcePath path)
|
||||
public Dictionary<string, HashSet<ErrorNode>> ValidateDirectory(ResourcePath path)
|
||||
{
|
||||
var streams = Resources.ContentFindFiles(path).ToList().AsParallel()
|
||||
.Where(filePath => filePath.Extension == "yml" && !filePath.Filename.StartsWith("."));
|
||||
|
||||
var dict = new Dictionary<Type, List<(string file, ValidatedNode node)>>();
|
||||
var dict = new Dictionary<string, HashSet<ErrorNode>>();
|
||||
foreach (var resourcePath in streams)
|
||||
{
|
||||
using var reader = ReadFile(resourcePath);
|
||||
@@ -375,12 +375,15 @@ namespace Robust.Shared.Prototypes
|
||||
throw new PrototypeLoadException($"Unknown prototype type: '{type}'");
|
||||
}
|
||||
|
||||
if (!dict.TryGetValue(prototypeTypes[type], out var hashSet))
|
||||
dict[prototypeTypes[type]] = new List<(string, ValidatedNode)>();
|
||||
|
||||
var mapping = node.ToDataNodeCast<MappingDataNode>();
|
||||
mapping.RemoveNode("type");
|
||||
dict[prototypeTypes[type]].Add((resourcePath.ToString(), _serializationManager.ValidateNode(prototypeTypes[type], mapping)));
|
||||
var errorNodes = _serializationManager.ValidateNode(prototypeTypes[type], mapping).GetErrors().ToHashSet();
|
||||
if (errorNodes.Count != 0)
|
||||
{
|
||||
if (!dict.TryGetValue(resourcePath.ToString(), out var hashSet))
|
||||
dict[resourcePath.ToString()] = new HashSet<ErrorNode>();
|
||||
dict[resourcePath.ToString()].UnionWith(errorNodes);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace Robust.Shared.Serialization.Manager
|
||||
/// A node with whether or not <see cref="node"/> is valid and which of its fields
|
||||
/// are invalid, if any.
|
||||
/// </returns>
|
||||
ValidatedNode ValidateNode(Type type, DataNode node, ISerializationContext? context = null);
|
||||
ValidationNode ValidateNode(Type type, DataNode node, ISerializationContext? context = null);
|
||||
|
||||
/// <summary>
|
||||
/// Validates that a node has all the properties required by a certain type with its serializer.
|
||||
@@ -48,7 +48,7 @@ namespace Robust.Shared.Serialization.Manager
|
||||
/// A node with whether or not <see cref="node"/> is valid and which of its fields
|
||||
/// are invalid, if any.
|
||||
/// </returns>
|
||||
ValidatedNode ValidateNode<T>(DataNode node, ISerializationContext? context = null);
|
||||
ValidationNode ValidateNode<T>(DataNode node, ISerializationContext? context = null);
|
||||
|
||||
/// <summary>
|
||||
/// Creates a deserialization result from a generic type and its fields,
|
||||
@@ -228,7 +228,7 @@ namespace Robust.Shared.Serialization.Manager
|
||||
/// A node with whether or not <see cref="node"/> is valid and which of its fields
|
||||
/// are invalid, if any.
|
||||
/// </returns>
|
||||
ValidatedNode ValidateFlag(Type tagType, DataNode node);
|
||||
ValidationNode ValidateFlag(Type tagType, DataNode node);
|
||||
|
||||
/// <summary>
|
||||
/// Deserializes a node into an enum value of the given type.
|
||||
@@ -247,7 +247,7 @@ namespace Robust.Shared.Serialization.Manager
|
||||
/// A node with whether or not <see cref="node"/> is valid and which of its fields
|
||||
/// are invalid, if any.
|
||||
/// </returns>
|
||||
ValidatedNode ValidateConstant(Type tagType, DataNode node);
|
||||
ValidationNode ValidateConstant(Type tagType, DataNode node);
|
||||
|
||||
/// <summary>
|
||||
/// Serializes an enum flag into a node.
|
||||
|
||||
@@ -12,7 +12,7 @@ namespace Robust.Shared.Serialization.Manager
|
||||
bool skipHook,
|
||||
ISerializationContext? context = null);
|
||||
|
||||
ValidatedNode Validate(ISerializationManager serializationManager, TNode node,
|
||||
ValidationNode Validate(ISerializationManager serializationManager, TNode node,
|
||||
ISerializationContext? context = null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,9 +130,9 @@ namespace Robust.Shared.Serialization.Manager
|
||||
return duplicates.Length > 0;
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, MappingDataNode node, ISerializationContext? context)
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, MappingDataNode node, ISerializationContext? context)
|
||||
{
|
||||
var validatedmapping = new Dictionary<ValidatedNode, ValidatedNode>();
|
||||
var validatedmapping = new Dictionary<ValidationNode, ValidationNode>();
|
||||
foreach (var (key, val) in node.Children)
|
||||
{
|
||||
if (key is not ValueDataNode valueDataNode)
|
||||
|
||||
@@ -119,7 +119,7 @@ namespace Robust.Shared.Serialization.Manager
|
||||
return _dataDefinitions.ContainsKey(type);
|
||||
}
|
||||
|
||||
public ValidatedNode ValidateNode(Type type, DataNode node, ISerializationContext? context = null)
|
||||
public ValidationNode ValidateNode(Type type, DataNode node, ISerializationContext? context = null)
|
||||
{
|
||||
var underlyingType = type.EnsureNotNullableType();
|
||||
|
||||
@@ -132,7 +132,7 @@ namespace Robust.Shared.Serialization.Manager
|
||||
var elementType = underlyingType.GetElementType();
|
||||
if (elementType == null)
|
||||
throw new ArgumentException($"Failed to get elementtype of arraytype {underlyingType}", nameof(underlyingType));
|
||||
var validatedList = new List<ValidatedNode>();
|
||||
var validatedList = new List<ValidationNode>();
|
||||
foreach (var dataNode in sequenceDataNode.Sequence)
|
||||
{
|
||||
validatedList.Add(ValidateNode(elementType, dataNode, context));
|
||||
@@ -190,7 +190,7 @@ namespace Robust.Shared.Serialization.Manager
|
||||
return new ErrorNode(node, "Failed to read node.");
|
||||
}
|
||||
|
||||
public ValidatedNode ValidateNode<T>(DataNode node, ISerializationContext? context = null)
|
||||
public ValidationNode ValidateNode<T>(DataNode node, ISerializationContext? context = null)
|
||||
{
|
||||
return ValidateNode(typeof(T), node, context);
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ namespace Robust.Shared.Serialization.Manager
|
||||
}
|
||||
}
|
||||
|
||||
public ValidatedNode ValidateFlag(Type tagType, DataNode node)
|
||||
public ValidationNode ValidateFlag(Type tagType, DataNode node)
|
||||
{
|
||||
var flagType = GetFlagTypeFromTag(tagType);
|
||||
switch (node)
|
||||
@@ -125,7 +125,7 @@ namespace Robust.Shared.Serialization.Manager
|
||||
return (int) Enum.Parse(constType, valueDataNode.Value);
|
||||
}
|
||||
|
||||
public ValidatedNode ValidateConstant(Type tagType, DataNode node)
|
||||
public ValidationNode ValidateConstant(Type tagType, DataNode node)
|
||||
{
|
||||
if (node is not ValueDataNode valueDataNode) return new ErrorNode(node, "Invalid nodetype for constant.");
|
||||
var constType = GetConstantTypeFromTag(tagType);
|
||||
|
||||
@@ -209,7 +209,7 @@ namespace Robust.Shared.Serialization.Manager
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool TryValidateWithTypeReader(Type type, DataNode node, ISerializationContext? context, [NotNullWhen(true)] out ValidatedNode? valid)
|
||||
private bool TryValidateWithTypeReader(Type type, DataNode node, ISerializationContext? context, [NotNullWhen(true)] out ValidationNode? valid)
|
||||
{
|
||||
//TODO Paul: do this shit w/ delegates
|
||||
var method = typeof(SerializationManager).GetRuntimeMethods().First(m =>
|
||||
@@ -220,7 +220,7 @@ namespace Robust.Shared.Serialization.Manager
|
||||
|
||||
if (res as bool? ?? false)
|
||||
{
|
||||
valid = (ValidatedNode)arr[2]!;
|
||||
valid = (ValidationNode)arr[2]!;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -231,7 +231,7 @@ namespace Robust.Shared.Serialization.Manager
|
||||
private bool TryValidateWithTypeReader<T, TNode>(
|
||||
TNode node,
|
||||
ISerializationContext? context,
|
||||
[NotNullWhen(true)] out ValidatedNode? valid)
|
||||
[NotNullWhen(true)] out ValidationNode? valid)
|
||||
where T : notnull
|
||||
where TNode : DataNode
|
||||
{
|
||||
|
||||
@@ -5,6 +5,14 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
public abstract class DataNode
|
||||
{
|
||||
public string? Tag;
|
||||
public DataPosition Start;
|
||||
public DataPosition End;
|
||||
|
||||
public DataNode(DataPosition start, DataPosition end)
|
||||
{
|
||||
Start = start;
|
||||
End = end;
|
||||
}
|
||||
|
||||
public abstract DataNode Copy();
|
||||
public abstract DataNode? Except(DataNode node);
|
||||
@@ -17,6 +25,9 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
|
||||
public abstract class DataNode<T> : DataNode where T : DataNode<T>
|
||||
{
|
||||
protected DataNode(DataPosition start, DataPosition end) : base(start, end)
|
||||
{ }
|
||||
|
||||
public abstract override T Copy();
|
||||
public abstract T? Except(T node);
|
||||
|
||||
|
||||
35
Robust.Shared/Serialization/Markdown/DataPosition.cs
Normal file
35
Robust.Shared/Serialization/Markdown/DataPosition.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using System;
|
||||
using YamlDotNet.Core;
|
||||
|
||||
namespace Robust.Shared.Serialization.Markdown
|
||||
{
|
||||
public struct DataPosition
|
||||
{
|
||||
public readonly int Line;
|
||||
public readonly int Column;
|
||||
|
||||
public DataPosition(int line, int column)
|
||||
{
|
||||
Line = line;
|
||||
Column = column;
|
||||
}
|
||||
|
||||
public DataPosition(Mark mark)
|
||||
{
|
||||
Line = mark.Line;
|
||||
Column = mark.Column;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
var code = new HashCode();
|
||||
code.Add(Line.GetHashCode());
|
||||
code.Add(Column.GetHashCode());
|
||||
return code.ToHashCode();
|
||||
}
|
||||
|
||||
public static DataPosition Invalid => new DataPosition(-1, -1);
|
||||
|
||||
public static implicit operator DataPosition(Mark mark) => new DataPosition(mark);
|
||||
}
|
||||
}
|
||||
@@ -13,9 +13,10 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
private Dictionary<DataNode, DataNode> _mapping = new();
|
||||
public IReadOnlyDictionary<DataNode, DataNode> Children => _mapping;
|
||||
|
||||
public MappingDataNode() { }
|
||||
public MappingDataNode() : base(DataPosition.Invalid, DataPosition.Invalid)
|
||||
{ }
|
||||
|
||||
public MappingDataNode(YamlMappingNode mapping)
|
||||
public MappingDataNode(YamlMappingNode mapping) : base(mapping.Start, mapping.End)
|
||||
{
|
||||
foreach (var (key, val) in mapping.Children)
|
||||
{
|
||||
@@ -25,7 +26,7 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
Tag = mapping.Tag;
|
||||
}
|
||||
|
||||
public MappingDataNode(Dictionary<DataNode, DataNode> nodes)
|
||||
public MappingDataNode(Dictionary<DataNode, DataNode> nodes) : this()
|
||||
{
|
||||
foreach (var (key, val) in nodes)
|
||||
{
|
||||
@@ -118,7 +119,7 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
|
||||
public MappingDataNode Merge(MappingDataNode otherMapping)
|
||||
{
|
||||
var newMapping = (Copy() as MappingDataNode)!;
|
||||
var newMapping = Copy();
|
||||
foreach (var (key, val) in otherMapping.Children)
|
||||
{
|
||||
//intentionally provokes argumentexception
|
||||
@@ -127,12 +128,21 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
|
||||
newMapping.Tag = Tag;
|
||||
|
||||
//todo paul should prob make this smarter
|
||||
newMapping.Start = Start;
|
||||
newMapping.End = End;
|
||||
|
||||
return newMapping;
|
||||
}
|
||||
|
||||
public override MappingDataNode Copy()
|
||||
{
|
||||
var newMapping = new MappingDataNode() {Tag = Tag};
|
||||
var newMapping = new MappingDataNode()
|
||||
{
|
||||
Tag = Tag,
|
||||
Start = Start,
|
||||
End = End
|
||||
};
|
||||
|
||||
foreach (var (key, val) in _mapping)
|
||||
{
|
||||
@@ -144,7 +154,7 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
|
||||
public override MappingDataNode? Except(MappingDataNode node)
|
||||
{
|
||||
var mappingNode = new MappingDataNode();
|
||||
var mappingNode = new MappingDataNode(){Tag = Tag, Start = Start, End = End};
|
||||
|
||||
foreach (var (key, val) in _mapping)
|
||||
{
|
||||
|
||||
@@ -9,14 +9,14 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
{
|
||||
private readonly List<DataNode> _nodes = new();
|
||||
|
||||
public SequenceDataNode() { }
|
||||
public SequenceDataNode() : base(DataPosition.Invalid, DataPosition.Invalid) { }
|
||||
|
||||
public SequenceDataNode(List<DataNode> nodes)
|
||||
public SequenceDataNode(List<DataNode> nodes) : this()
|
||||
{
|
||||
_nodes = nodes;
|
||||
}
|
||||
|
||||
public SequenceDataNode(YamlSequenceNode sequenceNode)
|
||||
public SequenceDataNode(YamlSequenceNode sequenceNode) : base(sequenceNode.Start, sequenceNode.End)
|
||||
{
|
||||
foreach (var node in sequenceNode.Children)
|
||||
{
|
||||
@@ -26,7 +26,7 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
Tag = sequenceNode.Tag;
|
||||
}
|
||||
|
||||
public SequenceDataNode(params DataNode[] nodes)
|
||||
public SequenceDataNode(params DataNode[] nodes) : this()
|
||||
{
|
||||
foreach (var node in nodes)
|
||||
{
|
||||
@@ -34,7 +34,7 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
}
|
||||
}
|
||||
|
||||
public SequenceDataNode(params string[] strings)
|
||||
public SequenceDataNode(params string[] strings) : this()
|
||||
{
|
||||
foreach (var s in strings)
|
||||
{
|
||||
@@ -76,7 +76,12 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
|
||||
public override SequenceDataNode Copy()
|
||||
{
|
||||
var newSequence = new SequenceDataNode() {Tag = Tag};
|
||||
var newSequence = new SequenceDataNode()
|
||||
{
|
||||
Tag = Tag,
|
||||
Start = Start,
|
||||
End = End
|
||||
};
|
||||
|
||||
foreach (var node in Sequence)
|
||||
{
|
||||
@@ -105,7 +110,12 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
{
|
||||
if (!set.Contains(nodeNode)) newList.Add(nodeNode);
|
||||
}
|
||||
return new SequenceDataNode(newList);
|
||||
return new SequenceDataNode(newList)
|
||||
{
|
||||
Tag = Tag,
|
||||
Start = Start,
|
||||
End = End
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +1,41 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Robust.Shared.Serialization.Markdown.Validation
|
||||
{
|
||||
public class ErrorNode : ValidatedNode
|
||||
public class ErrorNode : ValidationNode
|
||||
{
|
||||
public readonly DataNode Node;
|
||||
public string ErrorReason;
|
||||
public readonly string ErrorReason;
|
||||
public readonly bool AlwaysRelevant;
|
||||
|
||||
public ErrorNode(DataNode node, string errorReason)
|
||||
public ErrorNode(DataNode node, string errorReason, bool alwaysRelevant = false)
|
||||
{
|
||||
Node = node;
|
||||
ErrorReason = errorReason;
|
||||
AlwaysRelevant = alwaysRelevant;
|
||||
}
|
||||
|
||||
public override bool Valid => false;
|
||||
|
||||
public override IEnumerable<string> Invalids()
|
||||
public override IEnumerable<ErrorNode> GetErrors()
|
||||
{
|
||||
var str = Node.ToString();
|
||||
if (str != null)
|
||||
{
|
||||
yield return $"{str} ({ErrorReason})";
|
||||
}
|
||||
yield return this;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
var code = new HashCode();
|
||||
code.Add(Node.Start.GetHashCode());
|
||||
code.Add(Node.End.GetHashCode());
|
||||
code.Add(ErrorReason.GetHashCode());
|
||||
return code.ToHashCode();
|
||||
}
|
||||
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
if (obj is not ErrorNode node) return false;
|
||||
return Node.GetHashCode() == node.Node.GetHashCode(); // ErrorReason == node.ErrorReason
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ using System.Linq;
|
||||
|
||||
namespace Robust.Shared.Serialization.Markdown.Validation
|
||||
{
|
||||
public class InconclusiveNode : ValidatedNode
|
||||
public class InconclusiveNode : ValidationNode
|
||||
{
|
||||
public readonly DataNode DataNode;
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace Robust.Shared.Serialization.Markdown.Validation
|
||||
|
||||
public override bool Valid => true;
|
||||
|
||||
public override IEnumerable<string> Invalids() => Enumerable.Empty<string>();
|
||||
public override IEnumerable<ErrorNode> GetErrors() => Enumerable.Empty<ErrorNode>();
|
||||
|
||||
public override string? ToString()
|
||||
{
|
||||
|
||||
@@ -4,32 +4,27 @@ using System.Linq;
|
||||
|
||||
namespace Robust.Shared.Serialization.Markdown.Validation
|
||||
{
|
||||
public class ValidatedMappingNode : ValidatedNode
|
||||
public class ValidatedMappingNode : ValidationNode
|
||||
{
|
||||
public readonly Dictionary<ValidatedNode, ValidatedNode> Mapping;
|
||||
public readonly Dictionary<ValidationNode, ValidationNode> Mapping;
|
||||
public override bool Valid => Mapping.All(p => p.Key.Valid && p.Value.Valid);
|
||||
public override IEnumerable<string> Invalids()
|
||||
public override IEnumerable<ErrorNode> GetErrors()
|
||||
{
|
||||
foreach (var (key, value) in Mapping.Where(p => !p.Key.Valid || !p.Value.Valid))
|
||||
{
|
||||
if (!key.Valid)
|
||||
foreach (var invalid in key.GetErrors())
|
||||
{
|
||||
foreach (var invalid in key.Invalids())
|
||||
{
|
||||
yield return invalid;
|
||||
}
|
||||
yield return invalid;
|
||||
}
|
||||
else if (!value.Valid)
|
||||
|
||||
foreach (var invalid in value.GetErrors())
|
||||
{
|
||||
foreach (var invalid in value.Invalids())
|
||||
{
|
||||
yield return $"[{key}] <> {invalid}";
|
||||
}
|
||||
yield return invalid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ValidatedMappingNode(Dictionary<ValidatedNode, ValidatedNode> mapping)
|
||||
public ValidatedMappingNode(Dictionary<ValidationNode, ValidationNode> mapping)
|
||||
{
|
||||
Mapping = mapping;
|
||||
}
|
||||
|
||||
@@ -4,26 +4,23 @@ using System.Linq;
|
||||
|
||||
namespace Robust.Shared.Serialization.Markdown.Validation
|
||||
{
|
||||
public class ValidatedSequenceNode : ValidatedNode
|
||||
public class ValidatedSequenceNode : ValidationNode
|
||||
{
|
||||
public readonly List<ValidatedNode> Sequence;
|
||||
public readonly List<ValidationNode> Sequence;
|
||||
|
||||
public override bool Valid => Sequence.All(p => p.Valid);
|
||||
public override IEnumerable<string> Invalids()
|
||||
public override IEnumerable<ErrorNode> GetErrors()
|
||||
{
|
||||
for (int i = 0; i < Sequence.Count; i++)
|
||||
{
|
||||
var entry = Sequence[i];
|
||||
if(entry.Valid) continue;
|
||||
|
||||
foreach (var invalid in entry.Invalids())
|
||||
foreach (var invalid in Sequence[i].GetErrors())
|
||||
{
|
||||
yield return $"[{i}] <> {invalid}";
|
||||
yield return invalid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ValidatedSequenceNode(List<ValidatedNode> sequence)
|
||||
public ValidatedSequenceNode(List<ValidationNode> sequence)
|
||||
{
|
||||
Sequence = sequence;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ using System.Linq;
|
||||
|
||||
namespace Robust.Shared.Serialization.Markdown.Validation
|
||||
{
|
||||
public class ValidatedValueNode : ValidatedNode
|
||||
public class ValidatedValueNode : ValidationNode
|
||||
{
|
||||
public readonly DataNode DataNode;
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace Robust.Shared.Serialization.Markdown.Validation
|
||||
|
||||
public override bool Valid => true;
|
||||
|
||||
public override IEnumerable<string> Invalids() => Enumerable.Empty<string>();
|
||||
public override IEnumerable<ErrorNode> GetErrors() => Enumerable.Empty<ErrorNode>();
|
||||
|
||||
public override string? ToString()
|
||||
{
|
||||
|
||||
@@ -2,10 +2,10 @@ using System.Collections.Generic;
|
||||
|
||||
namespace Robust.Shared.Serialization.Markdown.Validation
|
||||
{
|
||||
public abstract class ValidatedNode
|
||||
public abstract class ValidationNode
|
||||
{
|
||||
public abstract bool Valid { get; }
|
||||
|
||||
public abstract IEnumerable<string> Invalids();
|
||||
public abstract IEnumerable<ErrorNode> GetErrors();
|
||||
}
|
||||
}
|
||||
@@ -1,16 +1,15 @@
|
||||
using YamlDotNet.Core.Tokens;
|
||||
using YamlDotNet.RepresentationModel;
|
||||
|
||||
namespace Robust.Shared.Serialization.Markdown
|
||||
{
|
||||
public class ValueDataNode : DataNode<ValueDataNode>
|
||||
{
|
||||
public ValueDataNode(string value)
|
||||
public ValueDataNode(string value) : base(DataPosition.Invalid, DataPosition.Invalid)
|
||||
{
|
||||
Value = value;
|
||||
}
|
||||
|
||||
public ValueDataNode(YamlScalarNode node)
|
||||
public ValueDataNode(YamlScalarNode node) : base(node.Start, node.End)
|
||||
{
|
||||
Value = node.Value ?? "";
|
||||
Tag = node.Tag;
|
||||
@@ -20,7 +19,12 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
|
||||
public override ValueDataNode Copy()
|
||||
{
|
||||
return new ValueDataNode(Value) {Tag = Tag};
|
||||
return new ValueDataNode(Value)
|
||||
{
|
||||
Tag = Tag,
|
||||
Start = Start,
|
||||
End = End
|
||||
};
|
||||
}
|
||||
|
||||
public override ValueDataNode? Except(ValueDataNode node)
|
||||
@@ -31,7 +35,7 @@ namespace Robust.Shared.Serialization.Markdown
|
||||
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
if(obj is not ValueDataNode node) return base.Equals(obj);
|
||||
if(obj is not ValueDataNode node) return false;
|
||||
return node.Value == Value;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<Angle>(angle);
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
var nodeValue = node.Value;
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<Box2>(new Box2(l, b, r, t));
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
var args = node.Value.Split(',');
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<Color>(deserializedColor);
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
return Color.TryFromName(node.Value, out _) || Color.TryFromHex(node.Value) != null ? new ValidatedValueNode(node) : new ErrorNode(node, "Failed parsing Color.");
|
||||
|
||||
@@ -79,12 +79,12 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedComponentRegistry(components, mappings);
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, SequenceDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, SequenceDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
var factory = serializationManager.ComponentFactory;
|
||||
var components = new ComponentRegistry();
|
||||
var list = new List<ValidatedNode>();
|
||||
var list = new List<ValidationNode>();
|
||||
|
||||
foreach (var componentMapping in node.Sequence.Cast<MappingDataNode>())
|
||||
{
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<IEntity>(entity);
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
// TODO Paul should we be checking entity exists here
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<FormattedMessage>(FormattedMessage.FromMarkup(node.Value));
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
return FormattedMessage.ValidMarkup(node.Value) ? new ValidatedValueNode(node) : new ErrorNode(node, "Invalid markup in FormattedMessage.");
|
||||
|
||||
@@ -52,28 +52,28 @@ namespace Robust.Shared.Serialization.TypeSerializers.Generic
|
||||
return new DeserializedDictionary<Dictionary<TKey, TValue>, TKey, TValue>(dict, mappedFields, dictInstance => dictInstance);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<SortedDictionary<TKey, TValue>, MappingDataNode>.Validate(
|
||||
ValidationNode ITypeReader<SortedDictionary<TKey, TValue>, MappingDataNode>.Validate(
|
||||
ISerializationManager serializationManager, MappingDataNode node, ISerializationContext? context = null)
|
||||
{
|
||||
return Validate(serializationManager, node, context);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<IReadOnlyDictionary<TKey, TValue>, MappingDataNode>.Validate(
|
||||
ValidationNode ITypeReader<IReadOnlyDictionary<TKey, TValue>, MappingDataNode>.Validate(
|
||||
ISerializationManager serializationManager, MappingDataNode node, ISerializationContext? context = null)
|
||||
{
|
||||
return Validate(serializationManager, node, context);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<Dictionary<TKey, TValue>, MappingDataNode>.Validate(
|
||||
ValidationNode ITypeReader<Dictionary<TKey, TValue>, MappingDataNode>.Validate(
|
||||
ISerializationManager serializationManager,
|
||||
MappingDataNode node, ISerializationContext? context = null)
|
||||
{
|
||||
return Validate(serializationManager, node, context);
|
||||
}
|
||||
|
||||
ValidatedNode Validate(ISerializationManager serializationManager, MappingDataNode node, ISerializationContext? context)
|
||||
ValidationNode Validate(ISerializationManager serializationManager, MappingDataNode node, ISerializationContext? context)
|
||||
{
|
||||
var mapping = new Dictionary<ValidatedNode, ValidatedNode>();
|
||||
var mapping = new Dictionary<ValidationNode, ValidationNode>();
|
||||
foreach (var (key, val) in node.Children)
|
||||
{
|
||||
mapping.Add(serializationManager.ValidateNode(typeof(TKey), key, context), serializationManager.ValidateNode(typeof(TValue), val, context));
|
||||
|
||||
@@ -35,22 +35,22 @@ namespace Robust.Shared.Serialization.TypeSerializers.Generic
|
||||
return new DeserializedCollection<HashSet<T>, T>(set, mappings, elements => new HashSet<T>(elements));
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<ImmutableHashSet<T>, SequenceDataNode>.Validate(
|
||||
ValidationNode ITypeReader<ImmutableHashSet<T>, SequenceDataNode>.Validate(
|
||||
ISerializationManager serializationManager,
|
||||
SequenceDataNode node, ISerializationContext? context = null)
|
||||
{
|
||||
return Validate(serializationManager, node, context);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<HashSet<T>, SequenceDataNode>.Validate(ISerializationManager serializationManager,
|
||||
ValidationNode ITypeReader<HashSet<T>, SequenceDataNode>.Validate(ISerializationManager serializationManager,
|
||||
SequenceDataNode node, ISerializationContext? context = null)
|
||||
{
|
||||
return Validate(serializationManager, node, context);
|
||||
}
|
||||
|
||||
ValidatedNode Validate(ISerializationManager serializationManager, SequenceDataNode node, ISerializationContext? context)
|
||||
ValidationNode Validate(ISerializationManager serializationManager, SequenceDataNode node, ISerializationContext? context)
|
||||
{
|
||||
var list = new List<ValidatedNode>();
|
||||
var list = new List<ValidationNode>();
|
||||
foreach (var elem in node.Sequence)
|
||||
{
|
||||
list.Add(serializationManager.ValidateNode(typeof(T), elem, context));
|
||||
|
||||
@@ -74,36 +74,36 @@ namespace Robust.Shared.Serialization.TypeSerializers.Generic
|
||||
return new DeserializedCollection<List<T>, T>(list, results, elements => elements);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<ImmutableList<T>, SequenceDataNode>.Validate(
|
||||
ValidationNode ITypeReader<ImmutableList<T>, SequenceDataNode>.Validate(
|
||||
ISerializationManager serializationManager,
|
||||
SequenceDataNode node, ISerializationContext? context = null)
|
||||
{
|
||||
return Validate(serializationManager, node, context);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<IReadOnlyCollection<T>, SequenceDataNode>.Validate(
|
||||
ValidationNode ITypeReader<IReadOnlyCollection<T>, SequenceDataNode>.Validate(
|
||||
ISerializationManager serializationManager,
|
||||
SequenceDataNode node, ISerializationContext? context = null)
|
||||
{
|
||||
return Validate(serializationManager, node, context);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<IReadOnlyList<T>, SequenceDataNode>.Validate(
|
||||
ValidationNode ITypeReader<IReadOnlyList<T>, SequenceDataNode>.Validate(
|
||||
ISerializationManager serializationManager,
|
||||
SequenceDataNode node, ISerializationContext? context = null)
|
||||
{
|
||||
return Validate(serializationManager, node, context);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<List<T>, SequenceDataNode>.Validate(ISerializationManager serializationManager,
|
||||
ValidationNode ITypeReader<List<T>, SequenceDataNode>.Validate(ISerializationManager serializationManager,
|
||||
SequenceDataNode node, ISerializationContext? context = null)
|
||||
{
|
||||
return Validate(serializationManager, node, context);
|
||||
}
|
||||
|
||||
ValidatedNode Validate(ISerializationManager serializationManager, SequenceDataNode sequenceDataNode, ISerializationContext? context)
|
||||
ValidationNode Validate(ISerializationManager serializationManager, SequenceDataNode sequenceDataNode, ISerializationContext? context)
|
||||
{
|
||||
var list = new List<ValidatedNode>();
|
||||
var list = new List<ValidationNode>();
|
||||
foreach (var elem in sequenceDataNode.Sequence)
|
||||
{
|
||||
list.Add(serializationManager.ValidateNode(typeof(T), elem, context));
|
||||
|
||||
@@ -26,13 +26,13 @@ namespace Robust.Shared.Serialization.TypeSerializers.Generic
|
||||
return DeserializationResult.Value(new ValueTuple<T1, T2>(v1, v2));
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, MappingDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, MappingDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
if (node.Children.Count != 1) return new ErrorNode(node, "More or less than 1 Mapping for ValueTuple found.");
|
||||
|
||||
var entry = node.Children.First();
|
||||
var dict = new Dictionary<ValidatedNode, ValidatedNode>
|
||||
var dict = new Dictionary<ValidationNode, ValidationNode>
|
||||
{
|
||||
{
|
||||
serializationManager.ValidateNode(typeof(T1), entry.Key, context),
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<MapId>(new MapId(val));
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
return int.TryParse(node.Value, out _) ? new ValidatedValueNode(node) : new ErrorNode(node, "Failed parsing MapId");
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<Regex>(new Regex(node.Value, RegexOptions.Compiled));
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
try
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Shared.ContentPack;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.IoC;
|
||||
using Robust.Shared.Serialization.Manager;
|
||||
using Robust.Shared.Serialization.Manager.Attributes;
|
||||
@@ -21,18 +22,27 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<ResourcePath>(new ResourcePath(node.Value));
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
var path = node.Value;
|
||||
if (path.EndsWith(".rsi"))
|
||||
{
|
||||
path = $"{path}{ResourcePath.SYSTEM_SEPARATOR}meta.json";
|
||||
if (!path.StartsWith(ResourcePath.SYSTEM_SEPARATOR))
|
||||
{
|
||||
path = $"{SharedSpriteComponent.TextureRoot}{ResourcePath.SYSTEM_SEPARATOR}{path}";
|
||||
}
|
||||
}
|
||||
try
|
||||
{
|
||||
return IoCManager.Resolve<IResourceManager>().ContentFileExists(new ResourcePath(node.Value))
|
||||
return IoCManager.Resolve<IResourceManager>().ContentFileExists(new ResourcePath(path))
|
||||
? new ValidatedValueNode(node)
|
||||
: new ErrorNode(node, "File not found.");
|
||||
: new ErrorNode(node, $"File not found. ({path})", true);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return new ErrorNode(node, "Failed parsing filepath.");
|
||||
return new ErrorNode(node, $"Failed parsing filepath. ({path}) ({e.Message})", true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return ((ITypeReader<Rsi, MappingDataNode>) this).Read(serializationManager, node, skipHook, context);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<SpriteSpecifier, ValueDataNode>.Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ValidationNode ITypeReader<SpriteSpecifier, ValueDataNode>.Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context)
|
||||
{
|
||||
var texNode = ((ITypeReader<Texture, ValueDataNode>) this).Validate(serializationManager, node, context);
|
||||
@@ -85,7 +85,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new ValidatedValueNode(node);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<EntityPrototype, ValueDataNode>.Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ValidationNode ITypeReader<EntityPrototype, ValueDataNode>.Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context)
|
||||
{
|
||||
//todo paul actually validate the id
|
||||
@@ -93,19 +93,19 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
}
|
||||
|
||||
|
||||
ValidatedNode ITypeReader<Texture, ValueDataNode>.Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ValidationNode ITypeReader<Texture, ValueDataNode>.Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context)
|
||||
{
|
||||
return serializationManager.ValidateNode(typeof(ResourcePath), new ValueDataNode($"{SharedSpriteComponent.TextureRoot / node.Value}"), context);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<SpriteSpecifier, MappingDataNode>.Validate(ISerializationManager serializationManager, MappingDataNode node,
|
||||
ValidationNode ITypeReader<SpriteSpecifier, MappingDataNode>.Validate(ISerializationManager serializationManager, MappingDataNode node,
|
||||
ISerializationContext? context)
|
||||
{
|
||||
return ((ITypeReader<Rsi, MappingDataNode>) this).Validate(serializationManager, node, context);
|
||||
}
|
||||
|
||||
ValidatedNode ITypeReader<Rsi, MappingDataNode>.Validate(ISerializationManager serializationManager, MappingDataNode node,
|
||||
ValidationNode ITypeReader<Rsi, MappingDataNode>.Validate(ISerializationManager serializationManager, MappingDataNode node,
|
||||
ISerializationContext? context)
|
||||
{
|
||||
if (!node.TryGetNode("sprite", out var pathNode) || pathNode is not ValueDataNode valuePathNode)
|
||||
@@ -118,7 +118,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new ErrorNode(node, "Missing/Invalid statenode");
|
||||
}
|
||||
|
||||
var path = serializationManager.ValidateNode(typeof(ResourcePath), new ValueDataNode($"{(SharedSpriteComponent.TextureRoot / valuePathNode.Value) / "meta.json"}"), context);
|
||||
var path = serializationManager.ValidateNode(typeof(ResourcePath), new ValueDataNode($"{SharedSpriteComponent.TextureRoot / valuePathNode.Value}"), context);
|
||||
|
||||
if (path is ErrorNode) return path;
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<string>(node.Value);
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
return new ValidatedValueNode(node);
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<TimeSpan>(TimeSpan.FromSeconds(seconds));
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
return double.TryParse(node.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out _)
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<UIBox2>(new UIBox2(l, t, r, b));
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
string raw = node.Value;
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<Vector2>(vector);
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
string raw = node.Value;
|
||||
|
||||
@@ -30,7 +30,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<Vector2i>(vector);
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
string raw = node.Value;
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<Vector3>(vector);
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
string raw = node.Value;
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace Robust.Shared.Serialization.TypeSerializers
|
||||
return new DeserializedValue<Vector4>(vector);
|
||||
}
|
||||
|
||||
public ValidatedNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
|
||||
ISerializationContext? context = null)
|
||||
{
|
||||
string raw = node.Value;
|
||||
|
||||
Reference in New Issue
Block a user