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    pub fn new(inner: T, description: &str) -> Self {
18        Self {
19            inner,
20            description: description.to_string(),
21        }
22    }
23
24    /// Get the description string.
25    pub fn description(&self) -> &str {
26        &self.description
27    }
28
29    /// Access the inner schema.
30    pub fn inner_schema(&self) -> &T {
31        &self.inner
32    }
33}
34
35impl<T: VldSchema> VldSchema for ZDescribe<T> {
36    type Output = T::Output;
37
38    fn parse_value(&self, value: &Value) -> Result<T::Output, VldError> {
39        self.inner.parse_value(value)
40    }
41}