pub trait Rule<T: ?Sized> {
// Required method
fn check(&self, value: &T) -> Result<(), String>;
}
Expand description
Define a rule for a type
By implementing Rule
for a type you define how
it will be used to constraint a type T
§Example
use type_rules::prelude::*;
struct IsEven();
impl Rule<i32> for IsEven {
fn check(&self, value: &i32) -> Result<(), String> {
if value % 2 == 0 {
Ok(())
} else {
Err("Value is not even".into())
}
}
}
#[derive(Validator)]
struct MyInteger(#[rule(IsEven())] i32);
Required Methods§
Implementors§
impl<'a, T, U> Rule<U> for All<'a, T>where
U: IntoIterator,
for<'b> &'b U: IntoIterator<Item = &'b U::Item>,
T: Rule<<U as IntoIterator>::Item>,
impl<'a, T, U> Rule<U> for Any<'a, T>where
U: IntoIterator,
for<'b> &'b U: IntoIterator<Item = &'b U::Item>,
T: Rule<<U as IntoIterator>::Item>,
impl<'a, T, U> Rule<U> for Eval<'a, T>
impl<'a, T, U> Rule<U> for In<'a, T>
impl<'a, T: AsRef<str> + ?Sized> Rule<T> for RegEx<'a>
Available on crate feature
regex
only.