pimalaya-tui 0.2.2

Collection of crossterm widgets shared accross Pimalaya projects
use inquire::{
    validator::{StringValidator, Validation},
    CustomUserError,
};

#[derive(Clone, Debug, Default)]
pub struct U16Validator;

impl StringValidator for U16Validator {
    fn validate(&self, input: &str) -> Result<Validation, CustomUserError> {
        match input.parse::<u16>() {
            Ok(_) => Ok(Validation::Valid),
            Err(err) => Err(Box::new(err)),
        }
    }
}

#[derive(Clone, Debug, Default)]
pub struct UsizeValidator;

impl StringValidator for UsizeValidator {
    fn validate(&self, input: &str) -> Result<Validation, CustomUserError> {
        match input.parse::<usize>() {
            Ok(_) => Ok(Validation::Valid),
            Err(err) => Err(Box::new(err)),
        }
    }
}

#[cfg(feature = "email")]
#[derive(Clone, Debug, Default)]
pub struct EmailValidator;

#[cfg(feature = "email")]
impl StringValidator for EmailValidator {
    fn validate(&self, input: &str) -> Result<Validation, CustomUserError> {
        match <email_address::EmailAddress as std::str::FromStr>::from_str(input) {
            Ok(_) => Ok(Validation::Valid),
            Err(err) => Err(Box::new(err)),
        }
    }
}