pub struct ZDiscriminatedUnion { /* private fields */ }Expand description
Discriminated union: chooses a schema based on a discriminator field value.
More efficient than a regular union because it looks up the correct variant by the discriminator field value instead of trying each schema in order.
Created via vld::discriminated_union().
§Example
ⓘ
let schema = vld::discriminated_union("type")
.variant("dog", vld::object().field("type", vld::literal("dog")).field("bark", vld::boolean()))
.variant("cat", vld::object().field("type", vld::literal("cat")).field("lives", vld::number().int()));Implementations§
Source§impl ZDiscriminatedUnion
impl ZDiscriminatedUnion
pub fn new(discriminator: impl Into<String>) -> ZDiscriminatedUnion
Sourcepub fn variant<S>(
self,
value: impl Into<Value>,
schema: S,
) -> ZDiscriminatedUnionwhere
S: DynSchema + 'static,
pub fn variant<S>(
self,
value: impl Into<Value>,
schema: S,
) -> ZDiscriminatedUnionwhere
S: DynSchema + 'static,
Add a variant: when the discriminator field equals value, use schema.
Sourcepub fn variant_str<S>(self, value: &str, schema: S) -> ZDiscriminatedUnionwhere
S: DynSchema + 'static,
pub fn variant_str<S>(self, value: &str, schema: S) -> ZDiscriminatedUnionwhere
S: DynSchema + 'static,
Add a string variant (convenience).
Trait Implementations§
Source§impl VldSchema for ZDiscriminatedUnion
impl VldSchema for ZDiscriminatedUnion
Source§fn parse_value(&self, value: &Value) -> Result<Value, VldError>
fn parse_value(&self, value: &Value) -> Result<Value, VldError>
Parse and validate a
serde_json::Value.Source§fn parse<I>(&self, input: &I) -> Result<Self::Output, VldError>
fn parse<I>(&self, input: &I) -> Result<Self::Output, VldError>
Parse from any supported input (JSON string, file path,
serde_json::Value, etc.)Source§fn validate<T>(&self, value: &T) -> Result<Self::Output, VldError>where
T: Serialize,
fn validate<T>(&self, value: &T) -> Result<Self::Output, VldError>where
T: Serialize,
Validate an existing Rust value against this schema. Read more
Source§fn is_valid<T>(&self, value: &T) -> boolwhere
T: Serialize,
fn is_valid<T>(&self, value: &T) -> boolwhere
T: Serialize,
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 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 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>(self, next: S) -> ZPipe<Self, S>
fn pipe<S>(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>(self, other: B) -> ZUnion2<Self, B>where
B: VldSchema,
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,
fn and<B>(self, other: B) -> ZIntersection<Self, B>where
B: VldSchema,
Create an intersection: input must satisfy both schemas.
Auto Trait Implementations§
impl Freeze for ZDiscriminatedUnion
impl !RefUnwindSafe for ZDiscriminatedUnion
impl !Send for ZDiscriminatedUnion
impl !Sync for ZDiscriminatedUnion
impl Unpin for ZDiscriminatedUnion
impl UnsafeUnpin for ZDiscriminatedUnion
impl !UnwindSafe for ZDiscriminatedUnion
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
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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