pub struct ZLazy<T, F>{ /* private fields */ }Expand description
Lazy schema for recursive/self-referencing data structures.
The schema factory is called on the first parse_value of this node and the
result is cached, which allows defining schemas that reference themselves
without rebuilding them on every parse.
Created via vld::lazy().
Every vld::lazy(...) node calls its factory once; nested lazy nodes
built by the factory are themselves created on first use, so a recursive
schema unfolds only as deep as the inputs go.
§Example
ⓘ
// Recursive tree: { value: i64, children: Tree[] }
fn tree_schema() -> impl VldSchema<Output = serde_json::Map<String, serde_json::Value>> {
vld::object()
.field("value", vld::number().int())
.field("children", vld::array(vld::lazy(tree_schema)))
}Implementations§
Trait Implementations§
Source§impl<T: VldSchema, F: Fn() -> T> CollectNestedSchemas for ZLazy<T, F>
Available on crate feature openapi only.
impl<T: VldSchema, F: Fn() -> T> CollectNestedSchemas for ZLazy<T, F>
Available on crate feature
openapi only.Source§fn collect_nested_schemas(&self, _out: &mut Vec<NestedSchemaEntry>)
fn collect_nested_schemas(&self, _out: &mut Vec<NestedSchemaEntry>)
Add the named schemas this schema references to
_out (for components.schemas).Source§impl<T: VldSchema, F: Fn() -> T> JsonSchema for ZLazy<T, F>
Available on crate feature openapi only.{} — a recursive schema cannot be expanded inline.
impl<T: VldSchema, F: Fn() -> T> JsonSchema for ZLazy<T, F>
Available on crate feature
openapi only.{} — a recursive schema cannot be expanded inline.
Source§fn json_schema(&self) -> Value
fn json_schema(&self) -> Value
Generate a JSON Schema representation.
Source§fn is_required(&self) -> bool
fn is_required(&self) -> bool
Whether this schema should be included in an object’s
required array. Read moreSource§impl<T, F> VldSchema for ZLazy<T, F>
impl<T, F> VldSchema for ZLazy<T, F>
Source§type Output = <T as VldSchema>::Output
type Output = <T as VldSchema>::Output
The Rust type produced by this schema after successful parsing.
Source§fn parse_value(&self, value: &Value) -> Result<T::Output, VldError>
fn parse_value(&self, value: &Value) -> Result<T::Output, VldError>
Parse and validate a
serde_json::Value.Source§fn parse_missing(&self) -> Result<T::Output, VldError>
fn parse_missing(&self) -> Result<T::Output, VldError>
Parse an object field whose key is absent. Read more
Source§fn parse<I: VldInput + ?Sized>(
&self,
input: &I,
) -> Result<Self::Output, VldError>
fn parse<I: VldInput + ?Sized>( &self, input: &I, ) -> Result<Self::Output, VldError>
Parse from any supported input (JSON string, file path,
serde_json::Value, etc.)Source§fn validate<T: Serialize>(&self, value: &T) -> Result<Self::Output, VldError>
fn validate<T: Serialize>(&self, value: &T) -> Result<Self::Output, VldError>
Validate an existing Rust value against this schema. Read more
Source§fn is_valid<T: Serialize>(&self, value: &T) -> bool
fn is_valid<T: Serialize>(&self, value: &T) -> bool
Check if an existing Rust value passes this schema’s validation. Read more
Source§fn optional(self) -> ZOptional<Self>
fn optional(self) -> ZOptional<Self>
Make this field optional. Missing or null values become
None.Source§fn with_default(self, value: Self::Output) -> ZDefault<Self>
fn with_default(self, value: Self::Output) -> ZDefault<Self>
Provide a default value when the field is missing or null.
Source§fn blank_as(self, value: Self::Output) -> ZDefault<Self>
fn blank_as(self, value: Self::Output) -> ZDefault<Self>
Like
with_default, and a blank string (empty or
whitespace only) also becomes value: legacy stores that write ""
or null for “unset”. Read moreSource§fn refine<F>(self, check: F, message: &str) -> ZRefine<Self, F>
fn refine<F>(self, check: F, message: &str) -> ZRefine<Self, F>
Add a custom refinement check without changing the output type.
Source§fn rule_msg<R>(self, rule: R, msg: impl Into<String>) -> ZRule<Self, R>
fn rule_msg<R>(self, rule: R, msg: impl Into<String>) -> ZRule<Self, R>
rule with a custom error message.Source§fn try_transform<F, U, E>(self, f: F) -> ZTryTransform<Self, F, U>
fn try_transform<F, U, E>(self, f: F) -> ZTryTransform<Self, F, U>
Transform the output with a fallible function; an
Err becomes a
validation issue (Custom { code: "transform" }, message = the error). Read moreSource§fn transform<F, U>(self, f: F) -> ZTransform<Self, F, U>
fn transform<F, U>(self, f: F) -> ZTransform<Self, F, U>
Transform the output value after successful parsing.
Source§fn catch(self, fallback: Self::Output) -> ZCatch<Self>
fn catch(self, fallback: Self::Output) -> ZCatch<Self>
Return a fallback value on ANY validation error.
Source§fn pipe<S: VldSchema>(self, next: S) -> ZPipe<Self, S>
fn pipe<S: VldSchema>(self, next: S) -> ZPipe<Self, S>
Chain this schema’s output into another schema. Read more
Source§fn describe(self, description: &str) -> ZDescribe<Self>
fn describe(self, description: &str) -> ZDescribe<Self>
Attach a human-readable description/label to this schema. Read more
Source§fn super_refine<F>(self, check: F) -> ZSuperRefine<Self, F>
fn super_refine<F>(self, check: F) -> ZSuperRefine<Self, F>
Add a custom refinement that can produce multiple errors. Read more
Source§fn or<B: VldSchema>(self, other: B) -> ZUnion2<Self, B>
fn or<B: VldSchema>(self, other: B) -> ZUnion2<Self, B>
Create a union: this schema or another. Returns
Either<Self::Output, B::Output>.Source§fn and<B: VldSchema>(self, other: B) -> ZIntersection<Self, B>
fn and<B: VldSchema>(self, other: B) -> ZIntersection<Self, B>
Create an intersection: input must satisfy both schemas.
Auto Trait Implementations§
impl<T, F> !Freeze for ZLazy<T, F>
impl<T, F> Forget for ZLazy<T, F>
impl<T, F> RefUnwindSafe for ZLazy<T, F>
impl<T, F> Send for ZLazy<T, F>
impl<T, F> Sync for ZLazy<T, F>
impl<T, F> Unpin for ZLazy<T, F>
impl<T, F> UnsafeUnpin for ZLazy<T, F>
impl<T, F> UnwindSafe for ZLazy<T, F>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> DynSchema for T
impl<T> DynSchema for T
Source§fn dyn_parse(&self, value: &Value) -> Result<Value, VldError>
fn dyn_parse(&self, value: &Value) -> Result<Value, VldError>
Parse
value and return the output serialized back to JSON.Source§fn dyn_parse_missing(&self) -> Result<Value, VldError>
fn dyn_parse_missing(&self) -> Result<Value, VldError>
VldSchema::parse_missing of the erased schema.Source§fn dyn_json_schema(&self) -> Value
fn dyn_json_schema(&self) -> Value
Available on crate feature
openapi only.JSON Schema of the erased schema.
Source§fn dyn_is_required(&self) -> bool
fn dyn_is_required(&self) -> bool
Available on crate feature
openapi only.Whether this field belongs in an object’s JSON Schema
required array.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more