Skip to content

Commit b0f4ecc

Browse files
jnthntatumcopybara-github
authored andcommitted
Use structured types in YAML export.
Updates Environment export to render types in variable and function declarations as structured maps instead of a string of the formatted name. PiperOrigin-RevId: 879117514
1 parent a881ed4 commit b0f4ecc

4 files changed

Lines changed: 182 additions & 2 deletions

File tree

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@
4040
import dev.cel.common.CelVarDecl;
4141
import dev.cel.common.internal.EnvVisitable;
4242
import dev.cel.common.internal.EnvVisitor;
43+
import dev.cel.common.types.CelKind;
4344
import dev.cel.common.types.CelProtoTypes;
4445
import dev.cel.common.types.CelType;
45-
import dev.cel.common.types.CelTypes;
4646
import dev.cel.compiler.CelCompiler;
4747
import dev.cel.extensions.CelExtensionLibrary;
4848
import dev.cel.extensions.CelExtensions;
@@ -484,7 +484,12 @@ private CelEnvironment.OverloadDecl toCelEnvOverloadDecl(CelOverloadDecl overloa
484484
}
485485

486486
private CelEnvironment.TypeDecl toCelEnvTypeDecl(CelType type) {
487-
return CelEnvironment.TypeDecl.create(CelTypes.format(type));
487+
return CelEnvironment.TypeDecl.newBuilder()
488+
.setName(type.name())
489+
.setIsTypeParam(type.kind() == CelKind.TYPE_PARAM)
490+
.addParams(
491+
type.parameters().stream().map(this::toCelEnvTypeDecl).collect(toImmutableList()))
492+
.build();
488493
}
489494

490495
/** Wrapper for CelOverloadDecl, associating it with the corresponding function name. */

bundle/src/test/java/dev/cel/bundle/CelEnvironmentExporterTest.java

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@
3636
import dev.cel.common.CelOptions;
3737
import dev.cel.common.CelOverloadDecl;
3838
import dev.cel.common.CelVarDecl;
39+
import dev.cel.common.types.ListType;
3940
import dev.cel.common.types.OpaqueType;
4041
import dev.cel.common.types.SimpleType;
42+
import dev.cel.common.types.TypeParamType;
4143
import dev.cel.extensions.CelExtensions;
4244
import java.net.URL;
4345
import java.util.HashSet;
@@ -176,6 +178,20 @@ public void customFunctions() {
176178
"math.isFinite",
177179
CelOverloadDecl.newGlobalOverload(
178180
"math_isFinite_int64", SimpleType.BOOL, SimpleType.INT)),
181+
CelFunctionDecl.newFunctionDeclaration(
182+
"zipGeneric",
183+
CelOverloadDecl.newGlobalOverload(
184+
"zip_list_list",
185+
ListType.create(ListType.create(TypeParamType.create("T"))),
186+
ListType.create(TypeParamType.create("T")),
187+
ListType.create(TypeParamType.create("T")))),
188+
CelFunctionDecl.newFunctionDeclaration(
189+
"zip",
190+
CelOverloadDecl.newGlobalOverload(
191+
"zip_list_int_list_int",
192+
ListType.create(ListType.create(SimpleType.INT)),
193+
ListType.create(SimpleType.INT),
194+
ListType.create(SimpleType.INT))),
179195
CelFunctionDecl.newFunctionDeclaration(
180196
"addWeeks",
181197
CelOverloadDecl.newMemberOverload(
@@ -207,6 +223,68 @@ public void customFunctions() {
207223
.setTarget(TypeDecl.create("google.protobuf.Timestamp"))
208224
.setArguments(ImmutableList.of(TypeDecl.create("int")))
209225
.setReturnType(TypeDecl.create("bool"))
226+
.build())),
227+
FunctionDecl.create(
228+
"zipGeneric",
229+
ImmutableSet.of(
230+
OverloadDecl.newBuilder()
231+
.setId("zip_list_list")
232+
.setArguments(
233+
ImmutableList.of(
234+
TypeDecl.newBuilder()
235+
.setName("list")
236+
.addParams(
237+
TypeDecl.newBuilder()
238+
.setName("T")
239+
.setIsTypeParam(true)
240+
.build())
241+
.build(),
242+
TypeDecl.newBuilder()
243+
.setName("list")
244+
.addParams(
245+
TypeDecl.newBuilder()
246+
.setName("T")
247+
.setIsTypeParam(true)
248+
.build())
249+
.build()))
250+
.setReturnType(
251+
TypeDecl.newBuilder()
252+
.setName("list")
253+
.addParams(
254+
TypeDecl.newBuilder()
255+
.setName("list")
256+
.addParams(
257+
TypeDecl.newBuilder()
258+
.setName("T")
259+
.setIsTypeParam(true)
260+
.build())
261+
.build())
262+
.build())
263+
.build())),
264+
FunctionDecl.create(
265+
"zip",
266+
ImmutableSet.of(
267+
OverloadDecl.newBuilder()
268+
.setId("zip_list_int_list_int")
269+
.setArguments(
270+
ImmutableList.of(
271+
TypeDecl.newBuilder()
272+
.setName("list")
273+
.addParams(TypeDecl.create("int"))
274+
.build(),
275+
TypeDecl.newBuilder()
276+
.setName("list")
277+
.addParams(TypeDecl.create("int"))
278+
.build()))
279+
.setReturnType(
280+
TypeDecl.newBuilder()
281+
.setName("list")
282+
.addParams(
283+
TypeDecl.newBuilder()
284+
.setName("list")
285+
.addParams(TypeDecl.create("int"))
286+
.build())
287+
.build())
210288
.build())));
211289

212290
// Random-check some standard functions: we don't want to see them explicitly defined.

bundle/src/test/java/dev/cel/bundle/CelEnvironmentYamlSerializerTest.java

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,68 @@ public void toYaml_success() throws Exception {
106106
.setReturnType(
107107
TypeDecl.newBuilder().setName("V").setIsTypeParam(true).build())
108108
.build())),
109+
FunctionDecl.create(
110+
"zip",
111+
ImmutableSet.of(
112+
OverloadDecl.newBuilder()
113+
.setId("zip_list_int_list_int")
114+
.setArguments(
115+
ImmutableList.of(
116+
TypeDecl.newBuilder()
117+
.setName("list")
118+
.addParams(TypeDecl.create("int"))
119+
.build(),
120+
TypeDecl.newBuilder()
121+
.setName("list")
122+
.addParams(TypeDecl.create("int"))
123+
.build()))
124+
.setReturnType(
125+
TypeDecl.newBuilder()
126+
.setName("list")
127+
.addParams(
128+
TypeDecl.newBuilder()
129+
.setName("list")
130+
.addParams(TypeDecl.create("int"))
131+
.build())
132+
.build())
133+
.build())),
134+
FunctionDecl.create(
135+
"zipGeneric",
136+
ImmutableSet.of(
137+
OverloadDecl.newBuilder()
138+
.setId("zip_list_list")
139+
.setArguments(
140+
ImmutableList.of(
141+
TypeDecl.newBuilder()
142+
.setName("list")
143+
.addParams(
144+
TypeDecl.newBuilder()
145+
.setName("T")
146+
.setIsTypeParam(true)
147+
.build())
148+
.build(),
149+
TypeDecl.newBuilder()
150+
.setName("list")
151+
.addParams(
152+
TypeDecl.newBuilder()
153+
.setName("T")
154+
.setIsTypeParam(true)
155+
.build())
156+
.build()))
157+
.setReturnType(
158+
TypeDecl.newBuilder()
159+
.setName("list")
160+
.addParams(
161+
TypeDecl.newBuilder()
162+
.setName("list")
163+
.addParams(
164+
TypeDecl.newBuilder()
165+
.setName("T")
166+
.setIsTypeParam(true)
167+
.build())
168+
.build())
169+
.build())
170+
.build())),
109171
FunctionDecl.create(
110172
"coalesce",
111173
ImmutableSet.of(

testing/src/test/resources/environment/dump_env.yaml

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,41 @@ functions:
6161
return:
6262
type_name: V
6363
is_type_param: true
64+
- name: zip
65+
overloads:
66+
- id: zip_list_int_list_int
67+
args:
68+
- type_name: list
69+
params:
70+
- type_name: int
71+
- type_name: list
72+
params:
73+
- type_name: int
74+
return:
75+
type_name: list
76+
params:
77+
- type_name: list
78+
params:
79+
- type_name: int
80+
- name: zipGeneric
81+
overloads:
82+
- id: zip_list_list
83+
args:
84+
- type_name: list
85+
params:
86+
- type_name: T
87+
is_type_param: true
88+
- type_name: list
89+
params:
90+
- type_name: T
91+
is_type_param: true
92+
return:
93+
type_name: list
94+
params:
95+
- type_name: list
96+
params:
97+
- type_name: T
98+
is_type_param: true
6499
- name: coalesce
65100
overloads:
66101
- id: coalesce_null_int

0 commit comments

Comments
 (0)