using System.Collections.Immutable; namespace StellaOps.PolicyDsl; /// /// Intermediate representation of a compiled policy document. /// public sealed record PolicyIrDocument( string Name, string Syntax, ImmutableSortedDictionary Metadata, ImmutableArray Profiles, ImmutableSortedDictionary Settings, ImmutableArray Rules); public abstract record PolicyIrLiteral; public sealed record PolicyIrStringLiteral(string Value) : PolicyIrLiteral; public sealed record PolicyIrNumberLiteral(decimal Value) : PolicyIrLiteral; public sealed record PolicyIrBooleanLiteral(bool Value) : PolicyIrLiteral; public sealed record PolicyIrListLiteral(ImmutableArray Items) : PolicyIrLiteral; public sealed record PolicyIrProfile( string Name, ImmutableArray Maps, ImmutableArray Environments, ImmutableArray Scalars); public sealed record PolicyIrProfileMap(string Name, ImmutableArray Entries); public sealed record PolicyIrProfileMapEntry(string Source, decimal Weight); public sealed record PolicyIrProfileEnv(string Name, ImmutableArray Entries); public sealed record PolicyIrProfileEnvEntry(PolicyExpression Condition, decimal Weight); public sealed record PolicyIrProfileScalar(string Name, PolicyIrLiteral Value); public sealed record PolicyIrRule( string Name, int Priority, PolicyExpression When, ImmutableArray ThenActions, ImmutableArray ElseActions, string Because); public abstract record PolicyIrAction; public sealed record PolicyIrAssignmentAction(ImmutableArray Target, PolicyExpression Value) : PolicyIrAction; public sealed record PolicyIrAnnotateAction(ImmutableArray Target, PolicyExpression Value) : PolicyIrAction; public sealed record PolicyIrIgnoreAction(PolicyExpression? Until, string? Because) : PolicyIrAction; public sealed record PolicyIrEscalateAction(PolicyExpression? To, PolicyExpression? When) : PolicyIrAction; public sealed record PolicyIrRequireVexAction(ImmutableSortedDictionary Conditions) : PolicyIrAction; public sealed record PolicyIrWarnAction(PolicyExpression? Message) : PolicyIrAction; public sealed record PolicyIrDeferAction(PolicyExpression? Until) : PolicyIrAction;