You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
920 B
32 lines
920 B
using JetBrains.Annotations;
|
|
using YamlDotNet.Serialization;
|
|
using YamlDotNet.Serialization.NodeDeserializers;
|
|
|
|
// ReSharper disable UnusedMember.Global
|
|
|
|
namespace Recyclarr.Common.YamlDotNet;
|
|
|
|
public static class YamlDotNetExtensions
|
|
{
|
|
public static T? DeserializeType<T>(this IDeserializer deserializer, string data)
|
|
where T : class
|
|
{
|
|
var extractor = deserializer.Deserialize<RootExtractor<T>>(data);
|
|
return extractor.RootObject;
|
|
}
|
|
|
|
public static DeserializerBuilder WithRequiredPropertyValidation(this DeserializerBuilder builder)
|
|
{
|
|
return builder
|
|
.WithNodeDeserializer(inner => new ValidatingDeserializer(inner),
|
|
s => s.InsteadOf<ObjectNodeDeserializer>());
|
|
}
|
|
|
|
[UsedImplicitly(ImplicitUseTargetFlags.Members)]
|
|
private sealed class RootExtractor<T>
|
|
where T : class
|
|
{
|
|
public T? RootObject { get; }
|
|
}
|
|
}
|