Expand description
§prost-reflect-validate
A protobuf library extending prost and prost-reflect with validation support.
This is a rust implementation of protoc-gen-validate.
It uses the prost-reflect crate to implement validation through reflection.
For a derive based implementation see the prost-validate crate.
§Usage
It must be used with prost and prost-reflect generated code.
All validation rules are documented in the proto file or in the protoc-gen-validate documentation.
Proto definition
proto/message.proto:
syntax = "proto3";
package validate.example;
import "validate/validate.proto";
message ExampleMessage {
string content = 1 [(validate.rules).string = {const: "Hello, world!"}];
}Build script
build.rs:
fn main() -> Result<(), Box<dyn std::error::Error>> {
prost_reflect_build::Builder::new()
.descriptor_pool("DESCRIPTOR_POOL")
.compile_protos(&["message.proto"], &["proto", "../prost-validate-types/proto"])?;
Ok(())
}Validation
It exposes a single extension trait ValidatorExt which can be used to validate protobuf reflect messages.
src/main.rs:
use example_proto::ExampleMessage;
use prost_reflect_validate::ValidatorExt;
match ExampleMessage::default().validate() {
Ok(_) => println!("Validation passed"),
Err(e) => eprintln!("Validation failed: {}", e),
}
let msg = ExampleMessage {
content: "Hello, world!".to_string(),
};
match msg.validate() {
Ok(_) => println!("Validation passed"),
Err(e) => eprintln!("Validation failed: {}", e),
}Output
Validation failed: “validate.example.ExampleMessage.content”: must be equal to “Hello, world!”
Validation passed
Traits§
- Validator
Ext - Extension trait for validating messages using
prost-reflect.