Skip to content

linka-cloud/prost-validate

Repository files navigation

MSRV Continuous integration Apache 2.0

Prost Validate

This is a Rust implementation of protoc-gen-validate.

It must be used with prost generated code.

All validation rules are documented in the proto file or in the protoc-gen-validate documentation.

It provides two implementations:

The test suite adapted from the protoc-gen-validate harness tests is shared between the two implementations.

Here are the benchmarks for the tests suite of the two implementations:

prost-reflect-validate:

harness reflect         time:   [14.849 ms 15.128 ms 15.459 ms]

prost-validate:

harness derive          time:   [2.5635 ms 2.5780 ms 2.5967 ms]

Constraint Rule Comparison

Global

Constraint Rule Derive Reflect
disabled

Numerics

Constraint Rule Derive Reflect
const
lt/lte/gt/gte
in/not_in

Bools

Constraint Rule Derive Reflect
const

Strings

Constraint Rule Derive Reflect
const
len/min_len/max_len
min_bytes/max_bytes
pattern
prefix/suffix/contains
contains/not_contains
in/not_in
email
hostname
address
ip
ipv4
ipv6
uri
uri_ref
uuid
well_known_regex

Bytes

Constraint Rule Derive Reflect
const
len/min_len/max_len
pattern
prefix/suffix/contains
in/not_in
ip
ipv4
ipv6

Enums

Constraint Rule Derive Reflect
const
defined_only
in/not_in

Messages

Constraint Rule Derive Reflect
skip
required

Repeated

Constraint Rule Derive Reflect
min_items/max_items
unique
items

Maps

Constraint Rule Derive Reflect
min_pairs/max_pairs
no_sparse
keys
values

OneOf

Constraint Rule Derive Reflect
required

WKT Scalar Value Wrappers

Constraint Rule Derive Reflect
wrapper validation

WKT Any

Constraint Rule Derive Reflect
required
in/not_in

WKT Duration

Constraint Rule Derive Reflect
required
const
lt/lte/gt/gte
in/not_in

WKT Timestamp

Constraint Rule Derive Reflect
required
const
lt/lte/gt/gte
lt_now/gt_now
within