pub type Validator<T> = fn(&T) -> bool;
pub type ErrorMessageGenerator<T> = fn(&T) -> String;
pub struct ValidatorManager<T: ?Sized> {
validator: Validator<T>,
error_message_generator: ErrorMessageGenerator<T>,
}
impl<T: ?Sized> ValidatorManager<T> {
pub fn new(validator: Validator<T>, error_message_generator: ErrorMessageGenerator<T>) -> Self {
Self {
validator,
error_message_generator,
}
}
pub fn validate(&self, input: &T) -> bool {
(self.validator)(input)
}
pub fn generate_error_message(&self, input: &T) -> String {
(self.error_message_generator)(input)
}
}