| File: src\Shared\Yaml\StringSequencesFlowStyle.cs | Web Access |
| Project: src\src\Aspire.Hosting.Docker\Aspire.Hosting.Docker.csproj (Aspire.Hosting.Docker) |
// 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; using YamlDotNet.Serialization.EventEmitters; namespace Aspire.Hosting.Yaml; /// <summary> /// A specialized implementation of the <see cref="ChainedEventEmitter"/> class /// that modifies the sequence style of string array sequences in YAML serialization. /// </summary> /// <remarks> /// <see cref="StringSequencesFlowStyle"/> ensures that when serializing sequences /// of strings (i.e., string arrays), the sequence is emitted using the flow style /// rather than the default block style. /// This is achieved by intercepting <see cref="SequenceStartEventInfo"/> for string arrays /// and altering its style property before emitting it to the next emitter in the chain. /// </remarks> internal sealed class StringSequencesFlowStyle(IEventEmitter nextEmitter) : ChainedEventEmitter(nextEmitter) { /// <summary> /// Emits a <see cref="SequenceStartEventInfo"/> during YAML serialization. /// Modifies sequences of string arrays to use a flow style instead of the default block style. /// </summary> /// <param name="eventInfo">The event information for the sequence start event to be emitted.</param> /// <param name="emitter">The emitter used to write the serialized YAML output.</param> public override void Emit(SequenceStartEventInfo eventInfo, IEmitter emitter) { if (typeof(string[]) == eventInfo.Source.Type) { eventInfo = new(eventInfo.Source) { Style = SequenceStyle.Flow, }; } nextEmitter.Emit(eventInfo, emitter); } }