| File: Yaml\KubernetesManifestResourceYamlConverter.cs | Web Access |
| Project: src\src\Aspire.Hosting.Kubernetes\Aspire.Hosting.Kubernetes.csproj (Aspire.Hosting.Kubernetes) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Serialization; namespace Aspire.Hosting.Kubernetes.Yaml; internal sealed class KubernetesManifestResourceYamlConverter : IYamlTypeConverter { public bool Accepts(Type type) { return type == typeof(KubernetesManifestResource); } public object? ReadYaml(IParser parser, Type type, ObjectDeserializer rootDeserializer) { throw new NotSupportedException($"{nameof(KubernetesManifestResource)} does not support YAML deserialization."); } public void WriteYaml(IEmitter emitter, object? value, Type type, ObjectSerializer serializer) { if (value is not KubernetesManifestResource manifest) { throw new InvalidOperationException($"Expected {nameof(KubernetesManifestResource)} but got {value?.GetType()}."); } emitter.Emit(new MappingStart()); WriteProperty("apiVersion", manifest.ApiVersion, serializer); WriteProperty("kind", manifest.Kind, serializer); WriteProperty("metadata", manifest.Metadata, serializer); foreach (var (key, fieldValue) in manifest.Fields) { WriteProperty(key, fieldValue, serializer); } emitter.Emit(new MappingEnd()); } private static void WriteProperty(string name, object? value, ObjectSerializer serializer) { serializer(name); serializer(value); } }