TimePasses/Model/IWhen.cs

38 lines
1.1 KiB
C#

using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Serialization;
namespace TimePasses.Model;
public interface IWhen {
ReplacementText Text { get; }
bool Slowly { get; }
bool IsValid(Plugin plugin);
}
public class WhenNodeDeserialiser : INodeDeserializer {
public bool Deserialize(IParser reader, Type expectedType, Func<IParser, Type, object?> nestedObjectDeserializer, out object? value) {
if (expectedType != typeof(IWhen)) {
value = null;
return false;
}
reader.Consume<MappingStart>();
var name = reader.Consume<Scalar>();
if (!name.IsKey) {
throw new YamlException("invalid when: missing key");
}
value = name.Value switch {
"quest" => nestedObjectDeserializer(reader, typeof(WhenQuest)),
"level" => nestedObjectDeserializer(reader, typeof(WhenLevel)),
_ => throw new YamlException($"invalid when: unknown type \"{name.Value}\""),
};
reader.Consume<MappingEnd>();
return true;
}
}