vld/combinators/
message.rs1use serde_json::Value;
2
3use crate::error::VldError;
4use crate::schema::VldSchema;
5
6pub struct ZMessage<T: VldSchema> {
21 inner: T,
22 msg: String,
23}
24
25impl<T: VldSchema> ZMessage<T> {
26 pub fn new(inner: T, msg: impl Into<String>) -> Self {
27 Self {
28 inner,
29 msg: msg.into(),
30 }
31 }
32}
33
34impl<T: VldSchema> VldSchema for ZMessage<T> {
35 type Output = T::Output;
36
37 fn parse_value(&self, value: &Value) -> Result<T::Output, VldError> {
38 self.inner.parse_value(value).map_err(|mut err| {
39 for issue in &mut err.issues {
40 issue.message = self.msg.clone();
41 }
42 err
43 })
44 }
45}