vld/combinators/
preprocess.rs1use serde_json::Value;
2
3use crate::error::VldError;
4use crate::schema::VldSchema;
5
6pub struct ZPreprocess<F, S>
24where
25 F: Fn(&Value) -> Value,
26 S: VldSchema,
27{
28 preprocessor: F,
29 schema: S,
30}
31
32impl<F, S> ZPreprocess<F, S>
33where
34 F: Fn(&Value) -> Value,
35 S: VldSchema,
36{
37 pub fn new(preprocessor: F, schema: S) -> Self {
38 Self {
39 preprocessor,
40 schema,
41 }
42 }
43}
44
45impl<F, S> VldSchema for ZPreprocess<F, S>
46where
47 F: Fn(&Value) -> Value,
48 S: VldSchema,
49{
50 type Output = S::Output;
51
52 fn parse_value(&self, value: &Value) -> Result<S::Output, VldError> {
53 let preprocessed = (self.preprocessor)(value);
54 self.schema.parse_value(&preprocessed)
55 }
56}