TimePasses/Model/IWhen.cs

42 lines
1.1 KiB
C#
Raw Normal View History

2024-06-17 17:25:46 +00:00
using YamlDotNet.Core;
using YamlDotNet.Core.Events;
2024-06-17 18:28:40 +00:00
using YamlDotNet.Serialization;
2024-06-17 17:25:46 +00:00
namespace TimePasses.Model;
public interface IWhen {
string Text { get; }
bool Slowly { get; }
bool IsValid(Plugin plugin);
}
2024-06-17 18:40:28 +00:00
public class WhenNodeDeserialiser : INodeDeserializer {
2024-06-17 18:28:40 +00:00
public bool Deserialize(IParser reader, Type expectedType, Func<IParser, Type, object?> nestedObjectDeserializer, out object? value) {
if (expectedType != typeof(IWhen)) {
value = null;
return false;
}
2024-06-17 17:25:46 +00:00
2024-06-17 18:28:40 +00:00
reader.Consume<MappingStart>();
var name = reader.Consume<Scalar>();
2024-06-17 17:25:46 +00:00
if (!name.IsKey) {
2024-06-17 18:28:40 +00:00
throw new YamlException("invalid when: missing key");
2024-06-17 17:25:46 +00:00
}
switch (name.Value) {
case "quest": {
2024-06-17 18:28:40 +00:00
value = nestedObjectDeserializer(reader, typeof(WhenQuest));
2024-06-17 17:41:16 +00:00
break;
2024-06-17 17:25:46 +00:00
}
default: {
2024-06-17 18:28:40 +00:00
throw new YamlException($"invalid when: unknown type \"{name.Value}\"");
2024-06-17 17:25:46 +00:00
}
}
2024-06-17 17:41:16 +00:00
2024-06-17 18:29:08 +00:00
reader.Consume<MappingEnd>();
2024-06-17 18:20:33 +00:00
return true;
2024-06-17 17:25:46 +00:00
}
}