Skip to content

Commit 9583634

Browse files
dmitriplotnikovcopybara-github
authored andcommitted
Update the "encodings" extension to be compatible with CelEnvironmentExporter
PiperOrigin-RevId: 786894924
1 parent f9b81a0 commit 9583634

5 files changed

Lines changed: 87 additions & 5 deletions

File tree

bundle/src/main/java/dev/cel/bundle/CelEnvironmentExporter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ public abstract static class Builder {
113113
@CanIgnoreReturnValue
114114
public Builder addStandardExtensions(CelOptions options) {
115115
addExtensionLibraries(
116+
CelExtensions.getExtensionLibrary("bindings", options),
117+
CelExtensions.getExtensionLibrary("encoders", options),
116118
CelExtensions.getExtensionLibrary("math", options),
117119
CelExtensions.getExtensionLibrary("lists", options));
118120
// TODO: add support for remaining standard extensions

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ java_library(
138138
"//common:compiler_common",
139139
"//common/ast",
140140
"//compiler:compiler_builder",
141+
"//extensions:extension_library",
141142
"//parser:macro",
142143
"//parser:parser_builder",
143144
"@maven//:com_google_errorprone_error_prone_annotations",
@@ -153,6 +154,8 @@ java_library(
153154
"//common:compiler_common",
154155
"//common/types",
155156
"//compiler:compiler_builder",
157+
"//extensions:extension_library",
158+
"//parser:macro",
156159
"//runtime",
157160
"//runtime:function_binding",
158161
"@maven//:com_google_errorprone_error_prone_annotations",

extensions/src/main/java/dev/cel/extensions/CelBindingsExtensions.java

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
import static com.google.common.base.Preconditions.checkNotNull;
1919

2020
import com.google.common.collect.ImmutableList;
21+
import com.google.common.collect.ImmutableSet;
2122
import com.google.errorprone.annotations.Immutable;
23+
import dev.cel.common.CelFunctionDecl;
2224
import dev.cel.common.CelIssue;
2325
import dev.cel.common.ast.CelExpr;
2426
import dev.cel.compiler.CelCompilerLibrary;
@@ -29,15 +31,47 @@
2931

3032
/** Internal implementation of the CEL local binding extensions. */
3133
@Immutable
32-
final class CelBindingsExtensions implements CelCompilerLibrary {
33-
34+
final class CelBindingsExtensions implements CelCompilerLibrary, CelExtensionLibrary.FeatureSet {
3435
private static final String CEL_NAMESPACE = "cel";
3536
private static final String UNUSED_ITER_VAR = "#unused";
3637

38+
private static final CelExtensionLibrary<CelBindingsExtensions> LIBRARY =
39+
new CelExtensionLibrary<CelBindingsExtensions>() {
40+
private final CelBindingsExtensions version0 = new CelBindingsExtensions();
41+
42+
@Override
43+
public String name() {
44+
return "bindings";
45+
}
46+
47+
@Override
48+
public ImmutableSet<CelBindingsExtensions> versions() {
49+
return ImmutableSet.of(version0);
50+
}
51+
};
52+
53+
static CelExtensionLibrary<CelBindingsExtensions> library() {
54+
return LIBRARY;
55+
}
56+
57+
@Override
58+
public int version() {
59+
return 0;
60+
}
61+
62+
@Override
63+
public ImmutableSet<CelFunctionDecl> functions() {
64+
return ImmutableSet.of();
65+
}
66+
67+
@Override
68+
public ImmutableSet<CelMacro> macros() {
69+
return ImmutableSet.of(CelMacro.newReceiverMacro("bind", 3, CelBindingsExtensions::expandBind));
70+
}
71+
3772
@Override
3873
public void setParserOptions(CelParserBuilder parserBuilder) {
39-
parserBuilder.addMacros(
40-
CelMacro.newReceiverMacro("bind", 3, CelBindingsExtensions::expandBind));
74+
parserBuilder.addMacros(macros());
4175
}
4276

4377
/**

extensions/src/main/java/dev/cel/extensions/CelEncoderExtensions.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
package dev.cel.extensions;
1616

17+
import static com.google.common.collect.ImmutableSet.toImmutableSet;
18+
1719
import com.google.common.collect.ImmutableSet;
1820
import com.google.errorprone.annotations.Immutable;
1921
import com.google.protobuf.ByteString;
@@ -22,6 +24,7 @@
2224
import dev.cel.common.CelOverloadDecl;
2325
import dev.cel.common.types.SimpleType;
2426
import dev.cel.compiler.CelCompilerLibrary;
27+
import dev.cel.parser.CelMacro;
2528
import dev.cel.runtime.CelFunctionBinding;
2629
import dev.cel.runtime.CelRuntimeBuilder;
2730
import dev.cel.runtime.CelRuntimeLibrary;
@@ -31,7 +34,9 @@
3134

3235
/** Internal implementation of Encoder Extensions. */
3336
@Immutable
34-
public class CelEncoderExtensions implements CelCompilerLibrary, CelRuntimeLibrary {
37+
public class CelEncoderExtensions
38+
implements CelCompilerLibrary, CelRuntimeLibrary, CelExtensionLibrary.FeatureSet {
39+
3540
private static final Encoder BASE64_ENCODER = Base64.getEncoder();
3641

3742
private static final Decoder BASE64_DECODER = Base64.getDecoder();
@@ -74,6 +79,40 @@ String getFunction() {
7479
}
7580
}
7681

82+
private static final CelExtensionLibrary<CelEncoderExtensions> LIBRARY =
83+
new CelExtensionLibrary<CelEncoderExtensions>() {
84+
private final CelEncoderExtensions version0 = new CelEncoderExtensions();
85+
86+
@Override
87+
public String name() {
88+
return "encoders";
89+
}
90+
91+
@Override
92+
public ImmutableSet<CelEncoderExtensions> versions() {
93+
return ImmutableSet.of(version0);
94+
}
95+
};
96+
97+
static CelExtensionLibrary<CelEncoderExtensions> library() {
98+
return LIBRARY;
99+
}
100+
101+
@Override
102+
public int version() {
103+
return 0;
104+
}
105+
106+
@Override
107+
public ImmutableSet<CelFunctionDecl> functions() {
108+
return functions.stream().map(f -> f.functionDecl).collect(toImmutableSet());
109+
}
110+
111+
@Override
112+
public ImmutableSet<CelMacro> macros() {
113+
return ImmutableSet.of();
114+
}
115+
77116
@Override
78117
public void setCheckerOptions(CelCheckerBuilder checkerBuilder) {
79118
functions.forEach(function -> checkerBuilder.addFunctionDeclarations(function.functionDecl));

extensions/src/main/java/dev/cel/extensions/CelExtensions.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,10 @@ public static ImmutableSet<String> getAllFunctionNames() {
303303
public static CelExtensionLibrary<? extends CelExtensionLibrary.FeatureSet> getExtensionLibrary(
304304
String name, CelOptions options) {
305305
switch (name) {
306+
case "bindings":
307+
return CelBindingsExtensions.library();
308+
case "encoders":
309+
return CelEncoderExtensions.library();
306310
case "math":
307311
return CelMathExtensions.library(options);
308312
case "lists":

0 commit comments

Comments
 (0)