-
Notifications
You must be signed in to change notification settings - Fork 53
Description
Feature description:
Support bitwise operations in predefined CEL rules.
For example,
extend buf.validate.Int32Rules {
optional bool power_of_two = 100000 [(buf.validate.predefined).cel = {
id: "int32.power_of_two"
message: "value must be a power of two"
expression: "this >= 0 && (this & (this - 1)) == 0"
}];
}
although the above rules can be successfully complied by protoc, when execute, I got this error:
compilation error: failed to compile standard rule "xxxxx.power_of_two": compilation error: failed to compile expression int32.power_of_two: ERROR: <input>:1:20: Syntax error: token recognition error at: '& '
| this >= 0 && (this & (this - 1)) == 0
I think CEL itself support bitwise operations? I'm not sure whether protovalidate disable it or there's some reason it doesn't work.
My toolchain version:
protoc: libprotoc 3.21.9
validate.proto: https://github.com/bufbuild/protovalidate/blob/51ee9b3a85ed11c19a2b8023aa2520cca82f431e/proto/protovalidate/buf/validate/validate.proto
protovalidate-go: buf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go v1.36.6-20250425153114-8976f5be98c1.1
Problem it solves or use case:
When predefining some more complicated rules.
Proposed implementation or solution:
Sorry, I'm still not familiar with the implementation yet.
Contribution:
Will to contribute, if I can get necessary guidance.
Examples or references:
None
Additional context:
None