pub fn not_empty(s: &String) -> bool {
!s.trim().is_empty()
}
pub fn min_length(min: usize) -> impl Fn(&String) -> bool {
move |s: &String| s.len() >= min
}
pub fn max_length(max: usize) -> impl Fn(&String) -> bool {
move |s: &String| s.len() <= max
}
pub fn is_positive<T: PartialOrd + Default>(n: &T) -> bool {
*n > T::default()
}
pub fn in_range<T: PartialOrd + Copy>(min: T, max: T) -> impl Fn(&T) -> bool {
move |n: &T| *n >= min && *n <= max
}
pub fn and<T, F1, F2>(validator1: F1, validator2: F2) -> impl Fn(&T) -> bool
where
F1: Fn(&T) -> bool,
F2: Fn(&T) -> bool,
{
move |value: &T| validator1(value) && validator2(value)
}
pub fn or<T, F1, F2>(validator1: F1, validator2: F2) -> impl Fn(&T) -> bool
where
F1: Fn(&T) -> bool,
F2: Fn(&T) -> bool,
{
move |value: &T| validator1(value) || validator2(value)
}