Skip to content

Commit 453328e

Browse files
dmitriplotnikovcopybara-github
authored andcommitted
Update the "encoders" extension to be compatible with CelEnvironmentExporter
PiperOrigin-RevId: 786894924
1 parent 1a0bc9c commit 453328e

File tree

6 files changed

+57
-3
lines changed

6 files changed

+57
-3
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ public abstract static class Builder {
114114
public Builder addStandardExtensions(CelOptions options) {
115115
addExtensionLibraries(
116116
CelExtensions.getExtensionLibrary("bindings", options),
117+
CelExtensions.getExtensionLibrary("encoders", options),
117118
CelExtensions.getExtensionLibrary("math", options),
118119
CelExtensions.getExtensionLibrary("lists", options));
119120
// TODO: add support for remaining standard extensions

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ java_library(
154154
"//common:compiler_common",
155155
"//common/types",
156156
"//compiler:compiler_builder",
157+
"//extensions:extension_library",
157158
"//runtime",
158159
"//runtime:function_binding",
159160
"@maven//:com_google_errorprone_error_prone_annotations",

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

Lines changed: 34 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;
@@ -31,7 +33,9 @@
3133

3234
/** Internal implementation of Encoder Extensions. */
3335
@Immutable
34-
public class CelEncoderExtensions implements CelCompilerLibrary, CelRuntimeLibrary {
36+
public class CelEncoderExtensions
37+
implements CelCompilerLibrary, CelRuntimeLibrary, CelExtensionLibrary.FeatureSet {
38+
3539
private static final Encoder BASE64_ENCODER = Base64.getEncoder();
3640

3741
private static final Decoder BASE64_DECODER = Base64.getDecoder();
@@ -74,6 +78,35 @@ String getFunction() {
7478
}
7579
}
7680

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

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,14 @@ interface FeatureSet {
5757
int version();
5858

5959
/** Returns the set of function declarations defined by this extension library. */
60-
ImmutableSet<CelFunctionDecl> functions();
60+
default ImmutableSet<CelFunctionDecl> functions() {
61+
return ImmutableSet.of();
62+
}
6163

6264
/** Returns the set of macros defined by this extension library. */
63-
ImmutableSet<CelMacro> macros();
65+
default ImmutableSet<CelMacro> macros() {
66+
return ImmutableSet.of();
67+
}
6468

6569
// TODO - Add a method for variables.
6670
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,8 @@ public static CelExtensionLibrary<? extends CelExtensionLibrary.FeatureSet> getE
305305
switch (name) {
306306
case "bindings":
307307
return CelBindingsExtensions.library();
308+
case "encoders":
309+
return CelEncoderExtensions.library();
308310
case "math":
309311
return CelMathExtensions.library(options);
310312
case "lists":

extensions/src/test/java/dev/cel/extensions/CelEncoderExtensionsTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import com.google.protobuf.ByteString;
2323
import com.google.testing.junit.testparameterinjector.TestParameterInjector;
2424
import dev.cel.common.CelAbstractSyntaxTree;
25+
import dev.cel.common.CelFunctionDecl;
26+
import dev.cel.common.CelOptions;
2527
import dev.cel.common.CelValidationException;
2628
import dev.cel.common.types.SimpleType;
2729
import dev.cel.compiler.CelCompiler;
@@ -43,6 +45,17 @@ public class CelEncoderExtensionsTest {
4345
private static final CelRuntime CEL_RUNTIME =
4446
CelRuntimeFactory.standardCelRuntimeBuilder().addLibraries(CelExtensions.encoders()).build();
4547

48+
@Test
49+
public void library() {
50+
CelExtensionLibrary<?> library =
51+
CelExtensions.getExtensionLibrary("encoders", CelOptions.DEFAULT);
52+
assertThat(library.name()).isEqualTo("encoders");
53+
assertThat(library.latest().version()).isEqualTo(0);
54+
assertThat(library.version(0).functions().stream().map(CelFunctionDecl::name))
55+
.containsExactly("base64.decode", "base64.encode");
56+
assertThat(library.version(0).macros()).isEmpty();
57+
}
58+
4659
@Test
4760
public void encode_success() throws Exception {
4861
String encodedBytes =

0 commit comments

Comments
 (0)