» Language: Conditionals

Conditional statements allow your policy to behave differently depending on a condition.

Conditional statements may only appear outside of rule expressions, such as in functions or in the global scope of a policy. This is because rules are only allowed to contain a single boolean expression.

» If Statements

if statements only execute their bodies if a condition is met. The syntax of an if statement is:

if condition {
  // ... this is executed if condition is true
}

The condition must result in a boolean, such as by calling a function or evaluating a boolean expression. If the condition is true, the body (within the {}) is executed. Otherwise, the body is skipped.

Examples:

// This would execute the body
value = 12
if value is 18 {
    print("condition met")
}

// Direct boolean values can be used
value = true
if value {
    print("condition met")
}

// This would not execute the body since the boolean expression will
// result in undefined.
value = {}
if value["key"] > 12 {
    print("condition met")
}

» Else, Else If

An else clause can be given to an if statement to execute a body in the case the condition is not met. By putting another if statement directly after the else, multiple conditions can be tested for. The syntax is:

if condition {
    // ...
} else {
    // ...
}

if condition {
    // ...
} else if other_condition {
    // ...
} else {
    // ...
}

» Scoping

The body of an if statement does not create a new scope. Any variables assigned within the body of an if statement will modify the scope that the if statement itself is in.

Example:

if true {
    a = 42
}

print(a) // 42
a = 18
if true {
    a = 42
}

print(a) // 42

» Case Statements

case statements are a selection control mechanism that execute a clause based on matching expressions. It is worth noting that the expression for case is optional. When no expression is provided, it defaults the expression to true. Additionally, the order of clauses is important, as they are evaluated from top to bottom, executing the first match. The syntax of a case statement is:

case expression {
    when clause_expression:
        // executed when clause_expression and expression are equal
    else:
        // executed if no clause matches expression
}

» When Clause

Any clause that has an expression for comparison must use the when keyword. It accepts a list of expressions, seperated by a ,.

Example:

case x {
    when "foo", "bar":
        return true
}
case  {
    when x > 40:
        return true
}

» Else Clause

The else keyword allows for capturing any expressions that have no matching when clause.

Example:

case x {
    when "foo", "bar":
        return true
    else:
        return false
}