From 9194667c6c1332912e8fc62aa1648fbe9f9fe75e Mon Sep 17 00:00:00 2001 From: Anna Date: Mon, 17 Jun 2024 14:28:40 -0400 Subject: [PATCH] fix: use a node deserialiser instead --- Model/IWhen.cs | 26 ++++++++++++++------------ Plugin.cs | 5 +---- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/Model/IWhen.cs b/Model/IWhen.cs index 768bb40..132efad 100644 --- a/Model/IWhen.cs +++ b/Model/IWhen.cs @@ -1,6 +1,6 @@ using YamlDotNet.Core; using YamlDotNet.Core.Events; -using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators; +using YamlDotNet.Serialization; namespace TimePasses.Model; @@ -11,25 +11,27 @@ public interface IWhen { bool IsValid(Plugin plugin); } -public class WhenDiscriminator : ITypeDiscriminator { - public Type BaseType => typeof(IWhen); - - public bool TryDiscriminate(IParser buffer, out Type? suggestedType) { - buffer.Consume(); - var name = buffer.Consume(); - if (!name.IsKey) { - suggestedType = null; +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"); + } + switch (name.Value) { case "quest": { - suggestedType = typeof(WhenQuest); + value = nestedObjectDeserializer(reader, typeof(WhenQuest)); break; } default: { - suggestedType = null; - return false; + throw new YamlException($"invalid when: unknown type \"{name.Value}\""); } } diff --git a/Plugin.cs b/Plugin.cs index b8beae5..153e907 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -27,10 +27,7 @@ public class Plugin : IDalamudPlugin { internal static IDeserializer Deserializer { get; } = new DeserializerBuilder() .WithNamingConvention(UnderscoredNamingConvention.Instance) - // .WithTypeConverter(new WhenConverter()) - .WithTypeDiscriminatingNodeDeserializer(o => { - o.AddTypeDiscriminator(new WhenDiscriminator()); - }) + .WithNodeDeserializer(new WhenNodeDeserialiser()) .Build(); private static class Signatures {