using System.IO;
using System.Text;
using System.Threading.Tasks;
using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
namespace k8s
{
///
/// This is a utility class that helps you load objects from YAML files.
///
public class Yaml {
public static async Task LoadFromStreamAsync(Stream stream) {
var reader = new StreamReader(stream);
var content = await reader.ReadToEndAsync();
return LoadFromString(content);
}
public static async Task LoadFromFileAsync (string file) {
using (FileStream fs = File.OpenRead(file)) {
return await LoadFromStreamAsync(fs);
}
}
public static T LoadFromString(string content) {
var deserializer =
new DeserializerBuilder()
.WithNamingConvention(new CamelCaseNamingConvention())
.Build();
var obj = deserializer.Deserialize(content);
return obj;
}
public static string SaveToString(T value)
{
var stringBuilder = new StringBuilder();
var writer = new StringWriter(stringBuilder);
var emitter = new Emitter(writer);
var serializer =
new SerializerBuilder()
.WithNamingConvention(new CamelCaseNamingConvention())
.BuildValueSerializer();
emitter.Emit(new StreamStart());
emitter.Emit(new DocumentStart());
serializer.SerializeValue(emitter, value, typeof(T));
return stringBuilder.ToString();
}
}
}