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.
recyclarr/src/TrashLib/Config/Secrets/SecretsDeserializer.cs

38 lines
968 B

using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Serialization;
namespace TrashLib.Config.Secrets;
public record SecretTag;
public class SecretsDeserializer : INodeDeserializer
{
private readonly ISecretsProvider _secrets;
public SecretsDeserializer(ISecretsProvider secrets)
{
_secrets = secrets;
}
public bool Deserialize(IParser reader, Type expectedType, Func<IParser, Type, object?> nestedObjectDeserializer,
out object? value)
{
// Only process items flagged as Secrets
if (expectedType != typeof(SecretTag))
{
value = null;
return false;
}
var secretKey = reader.Consume<Scalar>();
if (!_secrets.Secrets.TryGetValue(secretKey.Value, out var secretsValue))
{
throw new SecretNotFoundException(secretKey.Start.Line, secretKey.Value);
}
value = secretsValue;
return true;
}
}