From ab4b5fbd7a350896b0cadd1429cc1b1092cf677b Mon Sep 17 00:00:00 2001 From: Anna Date: Mon, 17 Jun 2024 14:20:33 -0400 Subject: [PATCH] fix: use custom discriminator --- Model/IWhen.cs | 31 ++++++++++++------------------- Plugin.cs | 6 +----- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/Model/IWhen.cs b/Model/IWhen.cs index dd839b9..768bb40 100644 --- a/Model/IWhen.cs +++ b/Model/IWhen.cs @@ -1,6 +1,6 @@ using YamlDotNet.Core; using YamlDotNet.Core.Events; -using YamlDotNet.Serialization; +using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators; namespace TimePasses.Model; @@ -11,35 +11,28 @@ public interface IWhen { bool IsValid(Plugin plugin); } -public class WhenConverter : IYamlTypeConverter { - public bool Accepts(Type type) { - // FIXME? typeof(IWhen).IsAssignableFrom(type) - return typeof(IWhen) == type; - } +public class WhenDiscriminator : ITypeDiscriminator { + public Type BaseType => typeof(IWhen); - public object? ReadYaml(IParser parser, Type type) { - parser.Consume(); - var name = parser.Consume(); + public bool TryDiscriminate(IParser buffer, out Type? suggestedType) { + buffer.Consume(); + var name = buffer.Consume(); if (!name.IsKey) { - throw new YamlException("invalid when: missing key"); + suggestedType = null; + return false; } - IWhen when; switch (name.Value) { case "quest": { - when = Plugin.Deserializer.Deserialize(parser); + suggestedType = typeof(WhenQuest); break; } default: { - throw new YamlException($"invalid when: unknown type {name.Value}"); + suggestedType = null; + return false; } } - parser.Consume(); - return when; - } - - public void WriteYaml(IEmitter emitter, object? value, Type type) { - throw new NotImplementedException(); + return true; } } diff --git a/Plugin.cs b/Plugin.cs index bafaee5..b8beae5 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -29,11 +29,7 @@ public class Plugin : IDalamudPlugin { .WithNamingConvention(UnderscoredNamingConvention.Instance) // .WithTypeConverter(new WhenConverter()) .WithTypeDiscriminatingNodeDeserializer(o => { - var keyMappings = new Dictionary { - ["quest"] = typeof(WhenQuest), - }; - - o.AddUniqueKeyTypeDiscriminator(keyMappings); + o.AddTypeDiscriminator(new WhenDiscriminator()); }) .Build();