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 nestedObjectDeserializer, out object? value) { if (expectedType != typeof(IWhen)) { value = null; return false; } reader.Consume(); var name = reader.Consume(); 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(); return true; } }