type-rules
A tool to easily constrain a struct and recover errors.
Table of Contents
Install
# Cargo.toml
[]
= { = "0.1", = ["derive", "regex"] }
Basic checking
You can declare a struct and impose some constraints on each field and check the validity like this:
use Validator;
//Don't forget to import the used rules.
use ;
let new_user = NewUser ;
assert!;
let new_user = NewUser ;
assert!; //Value is too short
Advanced checking
To check recursively, you can use the Validate
rule
use ;
use Validator;
, RegEx )] String);
You can use expressions directly in rule derive attribute.
For example, you can use const or function directly in the checker parameters:
use MaxRange;
use *;
use Validator;
))] );
use MinLength;
use Validator;
const MIN_PASSWORD_LENGTH: usize = 8;
)] String);
Or use expressions to express a checker directly. Here is an example of using a rule with more complex values:
use env;
use MaxLength;
use Validator;
)] String);
In this case the generate_max_payload_rule
function is executed at each check
Make your own rule
If you need a specific rule, just make a tuple struct (or struct if you make the declaration outside the struct definition)
that implements the Rule
feature :
use Rule;
use Validator;
;
)] i32);
Rules list
Here a list of the rules you can find in this crate, if you want more details go to the rule definition.
Check the length of a String
or &str
:
MinLength
: Minimum length ex:MinLength(5)
MaxLength
: Maximum length ex:MaxLength(20)
MinMaxLength
: Minimum and maximum length ex:MinMaxLength(5, 20)
Check the range for anything that implements PartialOrd<Self>
like all numeric/floating types
or dates with chrono
:
MinRange
: Minimum range ex:MinRange(5)
MaxRange
: Maximum range ex:MaxRange(20)
MinMaxRange
: Minimum and maximum range ex:MinMaxRange(5, 20)
Check the size of a Vec<T>
:
MinSize
: Minimum size ex:MinSize(5)
MaxSize
: Maximum size ex:MaxSize(20)
MinMaxSize
: Minimum and maximum size ex:MinMaxSize(5, 20)
others :
Validate
: Recursive checking ex:Validate()
RegEx
: check if aString
or&str
matches the regex. You need theregex
feature to use it. ex:RegEx(r"^\S+@\S+\.\S+")