Crates.io | prost-reflect-validate |
lib.rs | prost-reflect-validate |
version | 0.2.6 |
source | src |
created_at | 2024-09-17 10:19:57.867628 |
updated_at | 2024-10-16 08:43:44.92685 |
description | protoc-gen-validate's validation using prost-reflect |
homepage | |
repository | https://github.com/linka-cloud/prost-validate |
max_upload_size | |
id | 1377308 |
size | 120,177 |
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.
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
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.