Editor/Projection/CSharp/IReadOnlyWiring.cs
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; }
}