using System.Text.Json.Serialization; using Beam.Abstractions; namespace Beam.Models { public readonly struct ImmutableState : IReadOnlyState { private readonly string[] state; [JsonConstructor] public ImmutableState(params IEnumerable state) { this.state = state.ToArray(); } public ReadOnlySpan GetState() => this.state; public readonly State Copy() => new((string[])(state ?? []).Clone()); IState IReadOnlyState.Copy() => Copy(); public readonly string this[Index i] => state[i]; public static implicit operator State(ImmutableState state) => state.Copy(); } }