65 lines
2.4 KiB
C#
65 lines
2.4 KiB
C#
using System.Collections.Immutable;
|
|
|
|
namespace StellaOps.PolicyDsl;
|
|
|
|
/// <summary>
|
|
/// Intermediate representation of a compiled policy document.
|
|
/// </summary>
|
|
public sealed record PolicyIrDocument(
|
|
string Name,
|
|
string Syntax,
|
|
ImmutableSortedDictionary<string, PolicyIrLiteral> Metadata,
|
|
ImmutableArray<PolicyIrProfile> Profiles,
|
|
ImmutableSortedDictionary<string, PolicyIrLiteral> Settings,
|
|
ImmutableArray<PolicyIrRule> 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<PolicyIrLiteral> Items) : PolicyIrLiteral;
|
|
|
|
public sealed record PolicyIrProfile(
|
|
string Name,
|
|
ImmutableArray<PolicyIrProfileMap> Maps,
|
|
ImmutableArray<PolicyIrProfileEnv> Environments,
|
|
ImmutableArray<PolicyIrProfileScalar> Scalars);
|
|
|
|
public sealed record PolicyIrProfileMap(string Name, ImmutableArray<PolicyIrProfileMapEntry> Entries);
|
|
|
|
public sealed record PolicyIrProfileMapEntry(string Source, decimal Weight);
|
|
|
|
public sealed record PolicyIrProfileEnv(string Name, ImmutableArray<PolicyIrProfileEnvEntry> 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<PolicyIrAction> ThenActions,
|
|
ImmutableArray<PolicyIrAction> ElseActions,
|
|
string Because);
|
|
|
|
public abstract record PolicyIrAction;
|
|
|
|
public sealed record PolicyIrAssignmentAction(ImmutableArray<string> Target, PolicyExpression Value) : PolicyIrAction;
|
|
|
|
public sealed record PolicyIrAnnotateAction(ImmutableArray<string> 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<string, PolicyExpression> Conditions) : PolicyIrAction;
|
|
|
|
public sealed record PolicyIrWarnAction(PolicyExpression? Message) : PolicyIrAction;
|
|
|
|
public sealed record PolicyIrDeferAction(PolicyExpression? Until) : PolicyIrAction;
|