You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Aggregate walks through all matching rules (including nested ones) and appends them into a list:
```yaml
rule:
aggregate:
- condition: "true"
emit: "'FOO'"
- condition: "true"
emit: "'BAR'"
# Output: ['FOO', 'BAR']
```
Few noteworthy design decisions below. All examples assume all conditions matched:
1. For usability reasons, subrules under an aggregate ancestor will always have their **lists flattened**:
```YAML
name: aggregate_flat_flattening_example
rule:
aggregate:
- rule:
match:
- condition: "resource.is_admin == true"
output: "['GDPR_STANDARD', 'EU_B2C_NOTICE']"
- condition: "true"
emit: "'FALLBACK'"
# Output: ['GDPR_STANDARD', 'EU_B2C_NOTICE', 'FALLBACK']
```
2. Base case of an aggregate rule is an empty list. Nested conditional rules within an aggregate rule which outputs `optional.none()` are pruned (except in cases where policy output explicitly emits an `optional.none()`):
```YAML
name: optional_pruning_example
rule:
aggregate:
- rule:
match:
- condition: "1 == 2"
output: "'EU_NOTICE'"
- condition: "true"
emit: "'ALWAYS'"
# Output: ['ALWAYS']
```
```YAML
name: explicit_optional_none_example
rule:
aggregate:
- rule:
match:
- condition: "resource.is_b2c == true"
output: "optional.none()" # Explicitly authored by user
- condition: "true"
emit: "optional.of('ALWAYS')"
# Output: [optional.none(), optional.of('ALWAYS')]
```
Note: nesting `aggregate` clauses is currently not allowed, and will result in a compilation error.
PiperOrigin-RevId: 913930387
0 commit comments