Editor/Projection/CSharp/IReadOnlyWiring.cs

Interface IReadOnlyWiring represents read-only metadata for generated C# wiring, exposing namespace, class name, base class, symbols and usings. WiringEnvelopeView is a simple adapter that wraps a WiringEnvelope instance and provides fallbacks for namespace and class name while exposing the envelope's BaseClass, Symbols and Usings.

using System.Collections.Generic;
using Grains.RazorDesigner.Wiring;

namespace Grains.RazorDesigner.Projection.CSharp;

public interface IReadOnlyWiring
{
    string Namespace { get; }
    string ClassName { get; }
    string BaseClass { get; }
    IReadOnlyList<Symbol> Symbols { get; }
    IReadOnlyList<string> Usings { get; }
}

public sealed class WiringEnvelopeView : IReadOnlyWiring
{
    public WiringEnvelopeView( WiringEnvelope env, string namespaceFallback, string classNameFallback )
    {
        Namespace = string.IsNullOrEmpty( env.Namespace ) ? namespaceFallback : env.Namespace;
        ClassName = string.IsNullOrEmpty( env.ClassName ) ? classNameFallback : env.ClassName;
        BaseClass = env.BaseClass;
        Symbols   = env.Symbols;
        Usings    = env.Usings;
    }

    public string Namespace { get; }
    public string ClassName { get; }
    public string BaseClass { get; }
    public IReadOnlyList<Symbol> Symbols { get; }
    public IReadOnlyList<string> Usings { get; }
}