Dependencies/Pixie/Pixie.Terminal/Render/DegradableTextRenderer.cs
using WasmBox.Pixie.Markup;

namespace WasmBox.Pixie.Terminal.Render {
    /// <summary>
    /// A markup node renderer for degradable text nodes.
    /// </summary>
    public sealed class DegradableTextRenderer : NodeRenderer {
        private DegradableTextRenderer() { }

        /// <summary>
        /// An instance of a degradable text node renderer.
        /// </summary>
        public static readonly DegradableTextRenderer Instance = new DegradableTextRenderer();

        /// <inheritdoc/>
        public override bool CanRender(MarkupNode node) {
            return node is DegradableText;
        }

        /// <inheritdoc/>
        public override void Render(MarkupNode node, RenderState state) {
            var degradableText = (DegradableText)node;
            if (state.Terminal.CanRender(degradableText.Contents)) {
                state.Terminal.Write(degradableText.Contents);
            }
            else {
                state.Render(degradableText.Fallback);
            }
        }
    }
}