use of com.google.api.expr.v1alpha1.Type in project cel-java by projectnessie.
the class ProtoTypeRegistry method register.
@Override
public void register(Object t) {
if (t instanceof Message) {
Set<FileDescriptor> fds = collectFileDescriptorSet((Message) t);
for (FileDescriptor fd : fds) {
registerDescriptor(fd);
}
registerMessage((Message) t);
} else if (t instanceof org.projectnessie.cel.common.types.ref.Type) {
registerType((org.projectnessie.cel.common.types.ref.Type) t);
} else {
throw new RuntimeException(String.format("unsupported type: %s", t.getClass().getName()));
}
}
use of com.google.api.expr.v1alpha1.Type in project cel-java by projectnessie.
the class CELTest method Customtypes.
@Test
void Customtypes() {
Type exprType = Decls.newObjectType("google.api.expr.v1alpha1.Expr");
TypeRegistry reg = newEmptyRegistry();
Env e = newEnv(customTypeAdapter(reg), customTypeProvider(reg), container("google.api.expr.v1alpha1"), types(Expr.getDefaultInstance(), BoolT.BoolType, IntT.IntType, StringT.StringType), declarations(Decls.newVar("expr", exprType)));
AstIssuesTuple astIss = e.compile("expr == Expr{id: 2,\n" + "\t\t\tcall_expr: Expr.Call{\n" + "\t\t\t\tfunction: \"_==_\",\n" + "\t\t\t\targs: [\n" + "\t\t\t\t\tExpr{id: 1, ident_expr: Expr.Ident{ name: \"a\" }},\n" + "\t\t\t\t\tExpr{id: 3, ident_expr: Expr.Ident{ name: \"b\" }}]\n" + "\t\t\t}}");
assertThat(astIss.getAst().getResultType()).isEqualTo(Decls.Bool);
Program prg = e.program(astIss.getAst());
Object vars = mapOf("expr", Expr.newBuilder().setId(2).setCallExpr(Call.newBuilder().setFunction("_==_").addAllArgs(asList(Expr.newBuilder().setId(1).setIdentExpr(Ident.newBuilder().setName("a")).build(), Expr.newBuilder().setId(3).setIdentExpr(Ident.newBuilder().setName("b")).build()))).build());
EvalResult out = prg.eval(vars);
assertThat(out.getVal()).isSameAs(True);
}
use of com.google.api.expr.v1alpha1.Type in project cel-java by projectnessie.
the class CheckerEnvTest method overlappingOverload.
@Test
void overlappingOverload() {
CheckerEnv env = newStandardCheckerEnv(Container.defaultContainer, newRegistry());
Type paramA = Decls.newTypeParamType("A");
List<String> typeParamAList = singletonList("A");
Assertions.assertThatThrownBy(() -> env.add(Decls.newFunction(Overloads.TypeConvertDyn, Decls.newParameterizedOverload(Overloads.ToDyn, singletonList(paramA), Decls.Dyn, typeParamAList)))).hasMessage("overlapping overload for name 'dyn' (type '(type_param: \"A\") -> dyn' with overloadId: 'to_dyn' cannot be distinguished from '(type_param: \"A\") -> dyn' with overloadId: 'to_dyn')");
}
use of com.google.api.expr.v1alpha1.Type in project cel-java by projectnessie.
the class ConformanceServiceImpl method refValueToValue.
// TODO(jimlarson): The following conversion code should be moved to
// common/types/provider.go and consolidated/refactored as appropriate.
// In particular, make judicious use of types.NativeToValue().
/**
* RefValueToValue converts between ref.Val and Value. The ref.Val must not be error or unknown.
*/
static Value refValueToValue(Val res) {
switch(res.type().typeEnum()) {
case Bool:
return Value.newBuilder().setBoolValue(res.booleanValue()).build();
case Bytes:
return Value.newBuilder().setBytesValue(res.convertToNative(ByteString.class)).build();
case Double:
return Value.newBuilder().setDoubleValue(res.convertToNative(Double.class)).build();
case Int:
return Value.newBuilder().setInt64Value(res.intValue()).build();
case Null:
return Value.newBuilder().setNullValueValue(0).build();
case String:
return Value.newBuilder().setStringValue(res.value().toString()).build();
case Type:
return Value.newBuilder().setTypeValue(((TypeT) res).typeName()).build();
case Uint:
return Value.newBuilder().setUint64Value(res.intValue()).build();
case Duration:
Duration d = res.convertToNative(Duration.class);
return Value.newBuilder().setObjectValue(Any.pack(d)).build();
case Timestamp:
Timestamp t = res.convertToNative(Timestamp.class);
return Value.newBuilder().setObjectValue(Any.pack(t)).build();
case List:
Lister l = (Lister) res;
ListValue.Builder elts = ListValue.newBuilder();
for (IteratorT i = l.iterator(); i.hasNext() == True; ) {
Val v = i.next();
elts.addValues(refValueToValue(v));
}
return Value.newBuilder().setListValue(elts).build();
case Map:
Mapper m = (Mapper) res;
MapValue.Builder elems = MapValue.newBuilder();
for (IteratorT i = m.iterator(); i.hasNext() == True; ) {
Val k = i.next();
Val v = m.get(k);
Value kv = refValueToValue(k);
Value vv = refValueToValue(v);
elems.addEntriesBuilder().setKey(kv).setValue(vv);
}
return Value.newBuilder().setMapValue(elems).build();
case Object:
// Object type
Message pb = (Message) res.value();
Value.Builder v = Value.newBuilder();
// Somehow the conformance tests
if (pb instanceof ListValue) {
v.setListValue((ListValue) pb);
} else if (pb instanceof MapValue) {
v.setMapValue((MapValue) pb);
} else {
v.setObjectValue(Any.pack(pb));
}
return v.build();
default:
throw new IllegalStateException(String.format("Unknown %s", res.type().typeEnum()));
}
}
use of com.google.api.expr.v1alpha1.Type in project cel-java by projectnessie.
the class ConformanceServiceImpl method valueToRefValue.
/**
* ValueToRefValue converts between exprpb.Value and ref.Val.
*/
static Val valueToRefValue(TypeAdapter adapter, Value v) {
switch(v.getKindCase()) {
case NULL_VALUE:
return NullT.NullValue;
case BOOL_VALUE:
return boolOf(v.getBoolValue());
case INT64_VALUE:
return intOf(v.getInt64Value());
case UINT64_VALUE:
return uintOf(v.getUint64Value());
case DOUBLE_VALUE:
return doubleOf(v.getDoubleValue());
case STRING_VALUE:
return stringOf(v.getStringValue());
case BYTES_VALUE:
return bytesOf(v.getBytesValue().toByteArray());
case OBJECT_VALUE:
Any any = v.getObjectValue();
return adapter.nativeToValue(any);
case MAP_VALUE:
MapValue m = v.getMapValue();
Map<Val, Val> entries = new HashMap<>();
for (Entry entry : m.getEntriesList()) {
Val key = valueToRefValue(adapter, entry.getKey());
Val pb = valueToRefValue(adapter, entry.getValue());
entries.put(key, pb);
}
return adapter.nativeToValue(entries);
case LIST_VALUE:
ListValue l = v.getListValue();
List<Val> elts = l.getValuesList().stream().map(el -> valueToRefValue(adapter, el)).collect(Collectors.toList());
return adapter.nativeToValue(elts);
case TYPE_VALUE:
String typeName = v.getTypeValue();
Type tv = Types.getTypeByName(typeName);
if (tv != null) {
return tv;
}
return newObjectTypeValue(typeName);
default:
throw new IllegalArgumentException("unknown value " + v.getKindCase());
}
}
Aggregations