Editor/Wiring/Symbols/Symbol.cs
using System;
using System.Text.Json.Serialization;

namespace Grains.RazorDesigner.Wiring;

[JsonPolymorphic( TypeDiscriminatorPropertyName = "$type" )]
[JsonDerivedType( typeof( StateSymbol ),      "State" )]
[JsonDerivedType( typeof( ParameterSymbol ),  "Parameter" )]
[JsonDerivedType( typeof( NodeRefSymbol ),    "NodeRef" )]
[JsonDerivedType( typeof( MethodSymbol ),     "Method" )]
[JsonDerivedType( typeof( LifecycleSymbol ),  "Lifecycle" )]
public abstract record Symbol
{
    public Guid Id { get; init; } = Guid.NewGuid();
    public string Name { get; init; } = "";
}