using System.IO;
using System.Text.Json;
using System.Threading.Tasks;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.System.Text.Json;
namespace AggregateConfigBuildTask.FileHandlers
{
///
public class YamlFileHandler : IFileHandler
{
private readonly IFileSystem fileSystem;
internal YamlFileHandler(IFileSystem fileSystem)
{
this.fileSystem = fileSystem;
}
///
public async ValueTask ReadInput(string inputPath)
{
using (TextReader reader = fileSystem.OpenText(inputPath))
{
return await new ValueTask(
Task.FromResult(
new DeserializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.WithTypeConverter(new SystemTextJsonYamlTypeConverter())
.WithTypeInspector(x => new SystemTextJsonTypeInspector(x))
.Build()
.Deserialize(reader))).ConfigureAwait(false);
}
}
///
public void WriteOutput(JsonElement? mergedData, string outputPath)
{
var serializer = new SerializerBuilder()
.WithNamingConvention(CamelCaseNamingConvention.Instance)
.WithTypeConverter(new SystemTextJsonYamlTypeConverter())
.WithTypeInspector(x => new SystemTextJsonTypeInspector(x))
.Build();
var yamlContent = serializer.Serialize(mergedData);
fileSystem.WriteAllText(outputPath, yamlContent);
}
}
}