Skip to content

Commit 57f8218

Browse files
l46kokcopybara-github
authored andcommitted
Internal changes
PiperOrigin-RevId: 784671936
1 parent c83194d commit 57f8218

3 files changed

Lines changed: 32 additions & 4 deletions

File tree

policy/src/main/java/dev/cel/policy/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,9 @@ java_library(
167167
],
168168
deps = [
169169
":policy",
170+
"//:auto_value",
170171
"//common/formats:parser_context",
172+
"//policy:source",
171173
],
172174
)
173175

policy/src/main/java/dev/cel/policy/CelPolicyYamlParser.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,17 @@ private CelPolicy parseYaml() throws CelPolicyValidationException {
9494
}
9595

9696
@Override
97-
public CelPolicy parsePolicy(PolicyParserContext<Node> ctx, Node node) {
98-
CelPolicy.Builder policyBuilder = CelPolicy.newBuilder();
97+
public NewPolicyMetadata newPolicy(Node node) {
9998
long id = ctx.collectMetadata(node);
100-
if (!assertYamlType(ctx, id, node, YamlNodeType.MAP)) {
101-
return policyBuilder.setPolicySource(policySource).build();
99+
return NewPolicyMetadata.create(policySource, id);
100+
}
101+
102+
@Override
103+
public CelPolicy parsePolicy(PolicyParserContext<Node> ctx, Node node) {
104+
NewPolicyMetadata newPolicyMetadata = newPolicy(node);
105+
CelPolicy.Builder policyBuilder = newPolicyMetadata.policyBuilder();
106+
if (!assertYamlType(ctx, newPolicyMetadata.id(), node, YamlNodeType.MAP)) {
107+
return policyBuilder.build();
102108
}
103109

104110
MappingNode rootNode = (MappingNode) node;

policy/src/main/java/dev/cel/policy/PolicyParserContext.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
package dev.cel.policy;
1616

17+
import com.google.auto.value.AutoValue;
1718
import dev.cel.common.formats.ParserContext;
1819
import dev.cel.policy.CelPolicy.Match;
1920
import dev.cel.policy.CelPolicy.Rule;
@@ -24,6 +25,25 @@
2425
* for {@link CelPolicy}.
2526
*/
2627
public interface PolicyParserContext<T> extends ParserContext<T> {
28+
29+
/**
30+
* Wrapper for a new instance of {@link CelPolicy.Builder} and the associated node ID. The
31+
* CelPolicy builder also has a policy source set by the parser.
32+
*/
33+
@AutoValue
34+
abstract class NewPolicyMetadata {
35+
public abstract CelPolicy.Builder policyBuilder();
36+
37+
public abstract long id();
38+
39+
static NewPolicyMetadata create(CelPolicySource source, long id) {
40+
return new AutoValue_PolicyParserContext_NewPolicyMetadata(
41+
CelPolicy.newBuilder().setPolicySource(source), id);
42+
}
43+
}
44+
45+
NewPolicyMetadata newPolicy(T node);
46+
2747
CelPolicy parsePolicy(PolicyParserContext<T> ctx, T node);
2848

2949
Rule parseRule(PolicyParserContext<T> ctx, CelPolicy.Builder policyBuilder, T node);

0 commit comments

Comments
 (0)