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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions