using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Serialization; namespace TimePasses.Model; public interface IWhen { string Text { get; } bool Slowly { get; } bool IsValid(Plugin plugin); } public class WhenConverter : IYamlTypeConverter { public bool Accepts(Type type) { // FIXME? typeof(IWhen).IsAssignableFrom(type) return typeof(IWhen) == type; } public object? ReadYaml(IParser parser, Type type) { parser.Consume(); var name = parser.Consume(); if (!name.IsKey) { throw new YamlException("invalid when: missing key"); } IWhen when; switch (name.Value) { case "quest": { when = Plugin.Deserializer.Deserialize(parser); break; } default: { throw new YamlException($"invalid when: unknown type {name.Value}"); } } parser.Consume(); return when; } public void WriteYaml(IEmitter emitter, object? value, Type type) { throw new NotImplementedException(); } }