142 lines
4.6 KiB
C#
142 lines
4.6 KiB
C#
using System.Collections.Immutable;
|
|
|
|
namespace StellaOps.PolicyDsl;
|
|
|
|
public abstract record SyntaxNode(SourceSpan Span);
|
|
|
|
public sealed record PolicyDocumentNode(
|
|
string Name,
|
|
string Syntax,
|
|
ImmutableDictionary<string, PolicyLiteralValue> Metadata,
|
|
ImmutableArray<PolicyProfileNode> Profiles,
|
|
ImmutableDictionary<string, PolicyLiteralValue> Settings,
|
|
ImmutableArray<PolicyRuleNode> Rules,
|
|
SourceSpan Span) : SyntaxNode(Span);
|
|
|
|
public sealed record PolicyProfileNode(
|
|
string Name,
|
|
ImmutableArray<PolicyProfileItemNode> Items,
|
|
SourceSpan Span) : SyntaxNode(Span);
|
|
|
|
public abstract record PolicyProfileItemNode(SourceSpan Span);
|
|
|
|
public sealed record PolicyProfileMapNode(
|
|
string Name,
|
|
ImmutableArray<PolicyProfileMapEntryNode> Entries,
|
|
SourceSpan Span) : PolicyProfileItemNode(Span);
|
|
|
|
public sealed record PolicyProfileMapEntryNode(
|
|
string Source,
|
|
decimal Weight,
|
|
SourceSpan Span) : SyntaxNode(Span);
|
|
|
|
public sealed record PolicyProfileEnvNode(
|
|
string Name,
|
|
ImmutableArray<PolicyProfileEnvEntryNode> Entries,
|
|
SourceSpan Span) : PolicyProfileItemNode(Span);
|
|
|
|
public sealed record PolicyProfileEnvEntryNode(
|
|
PolicyExpression Condition,
|
|
decimal Weight,
|
|
SourceSpan Span) : SyntaxNode(Span);
|
|
|
|
public sealed record PolicyProfileScalarNode(
|
|
string Name,
|
|
PolicyLiteralValue Value,
|
|
SourceSpan Span) : PolicyProfileItemNode(Span);
|
|
|
|
public sealed record PolicyRuleNode(
|
|
string Name,
|
|
int Priority,
|
|
PolicyExpression When,
|
|
ImmutableArray<PolicyActionNode> ThenActions,
|
|
ImmutableArray<PolicyActionNode> ElseActions,
|
|
string? Because,
|
|
SourceSpan Span) : SyntaxNode(Span);
|
|
|
|
public abstract record PolicyActionNode(SourceSpan Span);
|
|
|
|
public sealed record PolicyAssignmentActionNode(
|
|
PolicyReference Target,
|
|
PolicyExpression Value,
|
|
SourceSpan Span) : PolicyActionNode(Span);
|
|
|
|
public sealed record PolicyAnnotateActionNode(
|
|
PolicyReference Target,
|
|
PolicyExpression Value,
|
|
SourceSpan Span) : PolicyActionNode(Span);
|
|
|
|
public sealed record PolicyIgnoreActionNode(
|
|
PolicyExpression? Until,
|
|
string? Because,
|
|
SourceSpan Span) : PolicyActionNode(Span);
|
|
|
|
public sealed record PolicyEscalateActionNode(
|
|
PolicyExpression? To,
|
|
PolicyExpression? When,
|
|
SourceSpan Span) : PolicyActionNode(Span);
|
|
|
|
public sealed record PolicyRequireVexActionNode(
|
|
ImmutableDictionary<string, PolicyExpression> Conditions,
|
|
SourceSpan Span) : PolicyActionNode(Span);
|
|
|
|
public sealed record PolicyWarnActionNode(
|
|
PolicyExpression? Message,
|
|
SourceSpan Span) : PolicyActionNode(Span);
|
|
|
|
public sealed record PolicyDeferActionNode(
|
|
PolicyExpression? Until,
|
|
SourceSpan Span) : PolicyActionNode(Span);
|
|
|
|
public abstract record PolicyExpression(SourceSpan Span);
|
|
|
|
public sealed record PolicyLiteralExpression(object? Value, SourceSpan Span) : PolicyExpression(Span);
|
|
|
|
public sealed record PolicyListExpression(ImmutableArray<PolicyExpression> Items, SourceSpan Span) : PolicyExpression(Span);
|
|
|
|
public sealed record PolicyIdentifierExpression(string Name, SourceSpan Span) : PolicyExpression(Span);
|
|
|
|
public sealed record PolicyMemberAccessExpression(PolicyExpression Target, string Member, SourceSpan Span) : PolicyExpression(Span);
|
|
|
|
public sealed record PolicyInvocationExpression(PolicyExpression Target, ImmutableArray<PolicyExpression> Arguments, SourceSpan Span) : PolicyExpression(Span);
|
|
|
|
public sealed record PolicyIndexerExpression(PolicyExpression Target, PolicyExpression Index, SourceSpan Span) : PolicyExpression(Span);
|
|
|
|
public sealed record PolicyUnaryExpression(PolicyUnaryOperator Operator, PolicyExpression Operand, SourceSpan Span) : PolicyExpression(Span);
|
|
|
|
public sealed record PolicyBinaryExpression(PolicyExpression Left, PolicyBinaryOperator Operator, PolicyExpression Right, SourceSpan Span) : PolicyExpression(Span);
|
|
|
|
public enum PolicyUnaryOperator
|
|
{
|
|
Not,
|
|
}
|
|
|
|
public enum PolicyBinaryOperator
|
|
{
|
|
And,
|
|
Or,
|
|
Equal,
|
|
NotEqual,
|
|
LessThan,
|
|
LessThanOrEqual,
|
|
GreaterThan,
|
|
GreaterThanOrEqual,
|
|
In,
|
|
NotIn,
|
|
}
|
|
|
|
public sealed record PolicyReference(ImmutableArray<string> Segments, SourceSpan Span)
|
|
{
|
|
public override string ToString() => string.Join(".", Segments);
|
|
}
|
|
|
|
public abstract record PolicyLiteralValue(SourceSpan Span);
|
|
|
|
public sealed record PolicyStringLiteral(string Value, SourceSpan Span) : PolicyLiteralValue(Span);
|
|
|
|
public sealed record PolicyNumberLiteral(decimal Value, SourceSpan Span) : PolicyLiteralValue(Span);
|
|
|
|
public sealed record PolicyBooleanLiteral(bool Value, SourceSpan Span) : PolicyLiteralValue(Span);
|
|
|
|
public sealed record PolicyListLiteral(ImmutableArray<PolicyLiteralValue> Items, SourceSpan Span) : PolicyLiteralValue(Span);
|