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.
43 lines
1.5 KiB
43 lines
1.5 KiB
using Common.YamlDotNet;
|
|
using TrashLib.Config.Secrets;
|
|
using YamlDotNet.Serialization;
|
|
using YamlDotNet.Serialization.NamingConventions;
|
|
|
|
namespace TrashLib.Config;
|
|
|
|
public class YamlSerializerFactory : IYamlSerializerFactory
|
|
{
|
|
private readonly IObjectFactory _objectFactory;
|
|
private readonly ISecretsProvider _secretsProvider;
|
|
|
|
public YamlSerializerFactory(IObjectFactory objectFactory, ISecretsProvider secretsProvider)
|
|
{
|
|
_objectFactory = objectFactory;
|
|
_secretsProvider = secretsProvider;
|
|
}
|
|
|
|
public IDeserializer CreateDeserializer(Action<DeserializerBuilder>? extraBuilder = null)
|
|
{
|
|
var builder = new DeserializerBuilder()
|
|
.WithNamingConvention(UnderscoredNamingConvention.Instance)
|
|
.WithTypeConverter(new YamlNullableEnumTypeConverter())
|
|
.WithNodeDeserializer(new SecretsDeserializer(_secretsProvider))
|
|
.WithTagMapping("!secret", typeof(SecretTag))
|
|
.WithNodeTypeResolver(new ReadOnlyCollectionNodeTypeResolver())
|
|
.WithNodeDeserializer(new ForceEmptySequences(_objectFactory))
|
|
.WithObjectFactory(_objectFactory);
|
|
|
|
extraBuilder?.Invoke(builder);
|
|
|
|
return builder.Build();
|
|
}
|
|
|
|
public ISerializer CreateSerializer()
|
|
{
|
|
return new SerializerBuilder()
|
|
.WithNamingConvention(UnderscoredNamingConvention.Instance)
|
|
.WithTypeConverter(new YamlNullableEnumTypeConverter())
|
|
.Build();
|
|
}
|
|
}
|