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
|
|
|
}
|
|
|
|
|
2024-06-19 14:30:45 +00:00
|
|
|
value = name.Value switch {
|
|
|
|
"quest" => nestedObjectDeserializer(reader, typeof(WhenQuest)),
|
|
|
|
"level" => nestedObjectDeserializer(reader, typeof(WhenLevel)),
|
|
|
|
_ => throw new YamlException($"invalid when: unknown type \"{name.Value}\""),
|
|
|
|
};
|
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
|
|
|
}
|
|
|
|
}
|