prost-protovalidate
Runtime validation for Protocol Buffer messages using buf.validate rules, built for prost and prost-reflect.
Dynamically inspects prost-reflect message descriptors, compiles buf.validate constraint annotations (including CEL expressions), and evaluates them against concrete message instances.
Quick Start
[]
= "0.14"
= "0.1"
Annotate your .proto files with buf.validate rules:
syntax = "proto3";
import "buf/validate/validate.proto";
message CreateUserRequest {
string name = 1 [(buf.validate.field).string.min_len = 1];
int32 age = 2 [(buf.validate.field).int32.gte = 18];
}
Validate in Rust:
use validate;
let request = CreateUserRequest ;
match validate
For repeated validations, construct a Validator once to cache compiled rules:
use Validator;
let validator = new;
validator.validate?;
Features
- Dynamic field inspection via
prost-reflectdescriptors — no static code generation needed for validators. - CEL evaluation — compiles and evaluates Common Expression Language expressions for cross-field and complex constraints.
- Aggregated violations — collects all constraint failures instead of short-circuiting on the first error.
- Evaluation caching —
Validatorcaches compiled AST/CEL rules, avoiding re-parsing on every call.
Compatibility
| prost-protovalidate | prost | prost-reflect | MSRV |
|---|---|---|---|
| 0.1.x | 0.14 | 0.16 | 1.86 |
License
MIT OR Apache-2.0