Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@ proto/checked.pb.go
proto/syntax.pb.go
*~
MODULE.bazel.lock
.ijwb/
1 change: 1 addition & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ use_repo(
"in_gopkg_yaml_v3",
"org_golang_google_genproto_googleapis_api",
"org_golang_google_genproto_googleapis_rpc",
"org_golang_google_grpc",
Comment thread
ChinmayMadeshi marked this conversation as resolved.
Outdated
"org_golang_google_protobuf",
"org_golang_x_text",
)
9 changes: 6 additions & 3 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,10 @@ http_archive(
urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.5.zip"],
)

load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository")
load("@com_google_googleapis//:repository_rules.bzl", "switched_rules_by_language")
load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps")
load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")

switched_rules_by_language(
name = "com_google_googleapis_imports",
Expand Down Expand Up @@ -101,8 +101,8 @@ go_repository(
go_repository(
name = "dev_cel_expr",
importpath = "cel.dev/expr",
sum = "h1:K4KOtPCJQjVggkARsjG9RWXP6O4R73aHeJMa/dmCQQg=",
version = "v0.23.1",
sum = "h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=",
version = "v0.24.0",
)

# local_repository(
Expand Down Expand Up @@ -158,12 +158,15 @@ go_register_toolchains(version = "1.22.0")
gazelle_dependencies()

load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies")

rules_proto_dependencies()

load("@rules_proto//proto:setup.bzl", "rules_proto_setup")

rules_proto_setup()

load("@rules_proto//proto:toolchains.bzl", "rules_proto_toolchains")

rules_proto_toolchains()

protobuf_deps()
6 changes: 3 additions & 3 deletions cel/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ go_library(
"decls.go",
"env.go",
"folding.go",
"io.go",
"inlining.go",
"io.go",
"library.go",
"macro.go",
"optimizer.go",
Expand Down Expand Up @@ -64,8 +64,8 @@ go_test(
"decls_test.go",
"env_test.go",
"folding_test.go",
"io_test.go",
"inlining_test.go",
"io_test.go",
"optimizer_test.go",
"prompt_test.go",
"validator_test.go",
Expand All @@ -90,8 +90,8 @@ go_test(
"//test/proto2pb:go_default_library",
"//test/proto3pb:go_default_library",
"@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library",
"@org_golang_google_protobuf//proto:go_default_library",
"@org_golang_google_protobuf//encoding/prototext:go_default_library",
"@org_golang_google_protobuf//proto:go_default_library",
"@org_golang_google_protobuf//types/known/structpb:go_default_library",
"@org_golang_google_protobuf//types/known/wrapperspb:go_default_library",
],
Expand Down
31 changes: 31 additions & 0 deletions cel/io.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,37 @@ func ValueAsAlphaProto(res ref.Val) (*exprpb.Value, error) {
return alpha, err
}

// RefValToExprValue converts between ref.Val and cel.expr.ExprValue.
// The result ExprValue is the serialized proto form.
func RefValToExprValue(res ref.Val) (*celpb.ExprValue, error) {
Comment thread
ChinmayMadeshi marked this conversation as resolved.
Outdated
switch res := res.(type) {
case *types.Unknown:
return &celpb.ExprValue{
Kind: &celpb.ExprValue_Unknown{
Unknown: &celpb.UnknownSet{
Exprs: res.IDs(),
},
}}, nil
case *types.Err:
return &celpb.ExprValue{
Kind: &celpb.ExprValue_Error{
Error: &celpb.ErrorSet{
// Keeping the error code as UNKNOWN since there's no error codes associated with
// Cel-Go runtime errors.
Errors: []*celpb.Status{{Code: 2, Message: res.Error()}},
},
},
}, nil
default:
val, err := ValueAsProto(res)
if err != nil {
return nil, err
}
return &celpb.ExprValue{
Kind: &celpb.ExprValue_Value{Value: val}}, nil
}
}

// ValueAsProto converts between ref.Val and cel.expr.Value.
// The result Value is the serialized proto form. The ref.Val must not be error or unknown.
func ValueAsProto(res ref.Val) (*celpb.Value, error) {
Expand Down
53 changes: 53 additions & 0 deletions cel/io_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
celast "github.com/google/cel-go/common/ast"
"github.com/google/cel-go/common/operators"
"github.com/google/cel-go/common/types"
"github.com/google/cel-go/common/types/ref"

proto3pb "github.com/google/cel-go/test/proto3pb"
exprpb "google.golang.org/genproto/googleapis/api/expr/v1alpha1"
Expand Down Expand Up @@ -193,6 +194,58 @@ func TestExprToString(t *testing.T) {
}
}

func TestRefValToExprValue(t *testing.T) {
tests := []struct {
name string
refVal ref.Val
expectError bool
}{
{
name: "unknown value",
refVal: types.NewUnknown(1, nil),
expectError: false,
},
{
name: "error value",
refVal: types.NewErr("test error"),
expectError: false,
},
{
name: "bool value",
refVal: types.Bool(true),
expectError: false,
},
{
name: "string value",
refVal: types.String("test"),
expectError: false,
},
{
name: "int value",
refVal: types.Int(1),
expectError: false,
},
}
for _, tst := range tests {
tc := tst
t.Run(tc.name, func(t *testing.T) {
exprVal, err := RefValToExprValue(tc.refVal)
if tc.expectError {
if err == nil {
t.Errorf("RefValToExprValue(%v) expected error, got %v", tc.refVal, exprVal)
}
} else {
if err != nil {
t.Errorf("RefValToExprValue(%v) failed with error: %v", tc.refVal, err)
}
if exprVal == nil {
t.Errorf("RefValToExprValue(%v) expected value, got nil", tc.refVal)
}
}
})
}
}

func TestAstToStringNil(t *testing.T) {
expr, err := AstToString(nil)
if err == nil || !strings.Contains(err.Error(), "unsupported expr") {
Expand Down
3 changes: 2 additions & 1 deletion conformance/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ _TESTS_TO_SKIP = [
"fields/qualified_identifier_resolution/map_value_repeat_key_heterogeneous",
"macros/map/map_extract_keys",
"timestamps/duration_converters/get_milliseconds",
"optionals/optionals/map_optional_select_has",
Comment thread
TristonianJones marked this conversation as resolved.

# Temporarily failing tests, need a spec update
"string_ext/value_errors/indexof_out_of_range,lastindexof_out_of_range",
Expand Down Expand Up @@ -84,9 +85,9 @@ go_test(
"@com_github_google_go_cmp//cmp:go_default_library",
"@dev_cel_expr//:expr",
"@dev_cel_expr//conformance:go_default_library",
"@dev_cel_expr//conformance/test:go_default_library",
"@dev_cel_expr//conformance/proto2:go_default_library",
"@dev_cel_expr//conformance/proto3:go_default_library",
"@dev_cel_expr//conformance/test:go_default_library",
"@io_bazel_rules_go//go/runfiles",
"@org_golang_google_genproto_googleapis_api//expr/v1alpha1:go_default_library",
"@org_golang_google_protobuf//encoding/prototext:go_default_library",
Expand Down
2 changes: 1 addition & 1 deletion conformance/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module github.com/google/cel-go/conformance
go 1.22.0

require (
cel.dev/expr v0.23.1
cel.dev/expr v0.24.0
github.com/bazelbuild/rules_go v0.49.0
github.com/google/cel-go v0.21.0
github.com/google/go-cmp v0.6.0
Expand Down
4 changes: 2 additions & 2 deletions conformance/go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
cel.dev/expr v0.23.1 h1:K4KOtPCJQjVggkARsjG9RWXP6O4R73aHeJMa/dmCQQg=
cel.dev/expr v0.23.1/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI=
github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g=
github.com/bazelbuild/rules_go v0.49.0 h1:5vCbuvy8Q11g41lseGJDc5vxhDjJtfxr6nM/IC4VmqM=
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ go 1.22.0
toolchain go1.23.0

require (
cel.dev/expr v0.23.1
cel.dev/expr v0.24.0
github.com/antlr4-go/antlr/v4 v4.13.0
github.com/stoewer/go-strcase v1.2.0
google.golang.org/genproto/googleapis/api v0.0.0-20240826202546-f6391c0de4c7
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
cel.dev/expr v0.23.1 h1:K4KOtPCJQjVggkARsjG9RWXP6O4R73aHeJMa/dmCQQg=
cel.dev/expr v0.23.1/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI=
github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
Expand Down
Loading