Skip to main content

vld/combinators/
describe.rs

1use serde_json::Value;
2
3use crate::error::VldError;
4use crate::schema::VldSchema;
5
6/// Wraps a schema with a human-readable description.
7///
8/// Created via [`VldSchema::describe()`].
9///
10/// The description is metadata-only and does not affect validation.
11pub struct ZDescribe<T: VldSchema> {
12    inner: T,
13    description: String,
14}
15
16impl<T: VldSchema> ZDescribe<T> {
17    /// Create the schema (the same as its `vld::` constructor function).
18    pub fn new(inner: T, description: &str) -> Self {
19        Self {
20            inner,
21            description: description.to_string(),
22        }
23    }
24
25    /// Get the description string.
26    pub fn description(&self) -> &str {
27        &self.description
28    }
29
30    /// Access the inner schema.
31    pub fn inner_schema(&self) -> &T {
32        &self.inner
33    }
34}
35
36impl<T: VldSchema> VldSchema for ZDescribe<T> {
37    type Output = T::Output;
38
39    fn parse_value(&self, value: &Value) -> Result<T::Output, VldError> {
40        self.inner.parse_value(value)
41    }
42    fn parse_missing(&self) -> Result<T::Output, VldError> {
43        self.inner.parse_missing()
44    }
45    fn output_json(&self, o: &Self::Output) -> Option<Value> {
46        self.inner.output_json(o)
47    }
48}