use serde_json::Value;
use crate::error::VldError;
use crate::schema::VldSchema;
pub struct ZPreprocess<F, S>
where
F: Fn(&Value) -> Value,
S: VldSchema,
{
preprocessor: F,
schema: S,
}
impl<F, S> ZPreprocess<F, S>
where
F: Fn(&Value) -> Value,
S: VldSchema,
{
pub fn new(preprocessor: F, schema: S) -> Self {
Self {
preprocessor,
schema,
}
}
}
impl<F, S> VldSchema for ZPreprocess<F, S>
where
F: Fn(&Value) -> Value,
S: VldSchema,
{
type Output = S::Output;
fn parse_value(&self, value: &Value) -> Result<S::Output, VldError> {
let preprocessed = (self.preprocessor)(value);
self.schema.parse_value(&preprocessed)
}
}