use serde_json::Value;
use std::marker::PhantomData;
use crate::error::VldError;
use crate::schema::VldSchema;
pub struct ZLazy<T, F>
where
F: Fn() -> T,
T: VldSchema,
{
factory: F,
_phantom: PhantomData<T>,
}
impl<T, F> ZLazy<T, F>
where
F: Fn() -> T,
T: VldSchema,
{
pub fn new(factory: F) -> Self {
Self {
factory,
_phantom: PhantomData,
}
}
}
impl<T, F> VldSchema for ZLazy<T, F>
where
F: Fn() -> T,
T: VldSchema,
{
type Output = T::Output;
fn parse_value(&self, value: &Value) -> Result<T::Output, VldError> {
let schema = (self.factory)();
schema.parse_value(value)
}
}