use std::marker::PhantomData;
use crate::core::spec::spec_provider::SpecProvider;
use crate::core::spec_error::SpecError;
pub enum Validated<T,S>
where
T: Clone,
S: SpecProvider<T>
{
Valid {
value: T,
_spec: PhantomData<S>
},
Invalid {
error: SpecError,
_spec: PhantomData<S>
}
}
impl <T, U> From<T> for Validated<T, U>
where
T: Clone,
U: SpecProvider<T>
{
fn from(value: T) -> Validated<T, U> {
let spec = U::spec();
match spec.validate(value) {
Ok(v) => Validated::Valid {
value: v,
_spec: PhantomData
},
Err(e) => Validated::Invalid {
error: e,
_spec: PhantomData
}
}
}
}