Crate prost_reflect_validate

source ·
Expand description

§prost-validate

A protobuf library extending prost and prost-reflect with validation support.

This a rust implementation protoc-gen-validate.

§Usage

It currently supports validation using reflection.

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

syntax = "proto3";

package validate.example;

import "validate/validate.proto";

message ExampleMessage {
  string content = 1 [(validate.rules).string = {const: "Hello, world!"}];
}

Validation

It exposes a single extension trait ValidatorExt which can be used to validate protobuf reflect messages.

mod proto {
    use once_cell::sync::Lazy;
    use prost_reflect::DescriptorPool;

    static DESCRIPTOR_POOL: Lazy<DescriptorPool> = Lazy::new(|| DescriptorPool::decode(include_bytes!(concat!(env!("OUT_DIR"), "/file_descriptor_set.bin")).as_ref()).unwrap());
    include!(concat!(env!("OUT_DIR"), "/validate.example.rs"));
}

fn main() {
    use prost_reflect_validate::ValidatorExt;
    use crate::proto::ExampleMessage;

    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),
    }
}

Ouput

Validation failed: validate.example.ExampleMessage.content: must be Hello, world!
Validation passed

§Minimum Supported Rust Version

Rust 1.64 or higher.

The minimum supported Rust version may be changed in the future, but it will be done with a minor version bump.

Traits§

  • Extension trait for validating messages using prost-reflect.