8 releases
0.2.6 | Oct 16, 2024 |
---|---|
0.2.5 | Oct 15, 2024 |
0.1.0 | Sep 22, 2024 |
0.0.1 |
|
#667 in Encoding
660 downloads per month
150KB
4K
SLoC
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
Minimum Supported Rust Version
Rust 1.74 or higher.
The minimum supported Rust version may be changed in the future, but it will be done with a minor version bump.
Dependencies
~8–16MB
~221K SLoC