Skip to main content

ZNullable

Struct ZNullable 

Source
pub struct ZNullable<T>
where T: VldSchema,
{ /* private fields */ }
Expand description

Wraps a schema to allow null values.

If the value is null, returns Ok(None). Otherwise, delegates to the inner schema and wraps the result in Some.

The difference from ZOptional is semantic:

  • optional(): field can be missing entirely
  • nullable(): field must be present but can be null

At the Value level both behave the same. The distinction matters when used with the schema! macro for object validation.

Implementations§

Source§

impl<T> ZNullable<T>
where T: VldSchema,

Source

pub fn new(inner: T) -> ZNullable<T>

Source

pub fn inner_schema(&self) -> &T

Access the inner schema (for JSON Schema generation).

Trait Implementations§

Source§

impl<T> VldSchema for ZNullable<T>
where T: VldSchema,

Source§

type Output = Option<<T as VldSchema>::Output>

The Rust type produced by this schema after successful parsing.
Source§

fn parse_value( &self, value: &Value, ) -> Result<Option<<T as VldSchema>::Output>, VldError>

Parse and validate a serde_json::Value.
Source§

fn parse<I>(&self, input: &I) -> Result<Self::Output, VldError>
where I: VldInput + ?Sized,

Parse from any supported input (JSON string, file path, serde_json::Value, etc.)
Source§

fn optional(self) -> ZOptional<Self>

Make this field optional. Missing or null values become None.
Source§

fn nullable(self) -> ZNullable<Self>

Allow null values. Null becomes None.
Source§

fn with_default(self, value: Self::Output) -> ZDefault<Self>
where Self::Output: Clone,

Provide a default value when the field is missing or null.
Source§

fn refine<F>(self, check: F, message: &str) -> ZRefine<Self, F>
where F: Fn(&Self::Output) -> bool,

Add a custom refinement check without changing the output type.
Source§

fn transform<F, U>(self, f: F) -> ZTransform<Self, F, U>
where F: Fn(Self::Output) -> U,

Transform the output value after successful parsing.
Source§

fn nullish(self) -> ZNullish<Self>

Make this field nullish (both optional and nullable).
Source§

fn catch(self, fallback: Self::Output) -> ZCatch<Self>
where Self::Output: Clone,

Return a fallback value on ANY validation error.
Source§

fn pipe<S>(self, next: S) -> ZPipe<Self, S>
where S: VldSchema, Self::Output: Serialize,

Chain this schema’s output into another schema. Read more
Source§

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>
where F: Fn(&Self::Output, &mut VldError),

Add a custom refinement that can produce multiple errors. Read more
Source§

fn or<B>(self, other: B) -> ZUnion2<Self, B>
where B: VldSchema,

Create a union: this schema or another. Returns Either<Self::Output, B::Output>.
Source§

fn and<B>(self, other: B) -> ZIntersection<Self, B>
where B: VldSchema,

Create an intersection: input must satisfy both schemas.
Source§

fn message(self, msg: impl Into<String>) -> ZMessage<Self>

Override the error message for this schema. Read more

Auto Trait Implementations§

§

impl<T> Freeze for ZNullable<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for ZNullable<T>
where T: RefUnwindSafe,

§

impl<T> Send for ZNullable<T>
where T: Send,

§

impl<T> Sync for ZNullable<T>
where T: Sync,

§

impl<T> Unpin for ZNullable<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for ZNullable<T>
where T: UnsafeUnpin,

§

impl<T> UnwindSafe for ZNullable<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.