1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
//! Provides validation for text inputs
use std::fmt::{Debug, Display};
pub trait Validator {
    type Err: Debug + Display;

    /// Invoked with the value to validate.
    ///
    /// If this produces `Ok(())` then the value is used and parsed, if
    /// an error is returned validation fails with that error.
    fn validate(&self, text: &str) -> Result<(), Self::Err>;
}

impl<T: Fn(&str) -> Result<(), E>, E: Debug + Display> Validator for T {
    type Err = E;

    fn validate(&self, text: &str) -> Result<(), Self::Err> {
        self(text)
    }
}