use crate::ValidationErrors;
#[cfg(feature = "async")]
use futures::Future;
#[cfg(feature = "async")]
use std::pin::Pin;
pub trait Validatable<Key> {
fn validate(&self) -> Result<(), ValidationErrors<Key>>;
fn validate_or_empty(&self) -> ValidationErrors<Key> {
match self.validate() {
Ok(()) => ValidationErrors::default(),
Err(errors) => errors,
}
}
}
#[cfg(feature = "async")]
#[cfg_attr(docsrs, doc(cfg(feature = "async")))]
pub trait AsyncValidatable<Key>
where
Key: 'static,
{
fn validate_future(&self) -> Pin<Box<dyn Future<Output = Result<(), ValidationErrors<Key>>>>>;
fn validate_future_or_empty(&self) -> Pin<Box<dyn Future<Output = ValidationErrors<Key>>>> {
let future = self.validate_future();
Box::pin(async move {
let result: Result<(), ValidationErrors<Key>> = future.await;
match result {
Ok(()) => ValidationErrors::default(),
Err(errors) => errors,
}
})
}
}