type-rules
A tool to easily constrain a struct and recover errors.
Table of Contents
Install
# Cargo.toml
[]
= { = "0.2.2", = ["derive", "regex"] }
Basic checking
You can declare a struct and impose some constraints on each field and check the validity like this:
use *;
use *;
let new_user = NewUser ;
assert!;
let new_user = NewUser ;
assert!; //Value is too short
Also works with enums :
use *;
Advanced checking
To check recursively, you can use the Validate
rule
use *;
, RegEx )] String);
You can use expressions directly in rule derive attribute.
For example, you can use const or function directly in the rule parameters:
use *;
use *;
))] );
use *;
;
Or use expressions to express a rule directly. Here is an example of using a rule with more complex values:
use env;
use *;
)] 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 *;
;
)] i32);
Rules list
Here a list of the rules you can find in this crate.
Each rule has its own documentation with examples.
Check the length of any type that implements AsRef<str>
such
as 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 :
Opt
: Apply another rule to inner value of anOption
ex:Opt(MinMaxRange(1, 4))
And
: Rule to ensure that 2 other rules areOk
ex:And(MaxLength(1000), RegEx(r"^\S+@\S+\.\S+"))
Or
: Rule to apply an Or condition on two other rules. ex:Or(MaxRange(-1), MinRange(1))
Eval
: Rule to constrain any type to a predicate ex:Eval(predicate, "Error message")
Validate
: Recursive checking ex:Validate()
In
: Rule to constrain a type to bein
a collection ex:In(["apple", "banana", "orange", "pear"], "Value need to be a fruit")
All
: Rule to constrain a collection to valid the specified rule ex:All(MinLength(1), "You can't use empty string")
RegEx
: check if a type that implementAsRef<str>
(String, &str, ...) matches the regex. You need theregex
feature to use it. ex:RegEx(r"^\S+@\S+\.\S+")