Skip to content

[Feature Request] Bitwise operation support in predefined CEL #362

@KeXiangWang

Description

@KeXiangWang

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    FeatureNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions