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(); } } }