Skip to main content

ZRecord

Struct ZRecord 

Source
pub struct ZRecord<V, K = AnyKey, M = HashMap<String, <V as VldSchema>::Output>>
where V: VldSchema,
{ /* private fields */ }
Expand description

Schema for validating JSON objects as key-value records. Created via vld::record() (HashMap<String, V>) or vld::record_with_keys() (HashMap<K, V>); ordered() switches the output to a BTreeMap.

Values are validated against the value schema; key and value issues are reported at the key’s path. If two keys parse to the same output key, the later one wins.

§Example

use vld::prelude::*;

let schema = vld::record(vld::number().int().positive());
let result = schema.parse(r#"{"a": 1, "b": 2}"#).unwrap();
assert_eq!(result.get("a"), Some(&1));

let ordered = vld::record(vld::boolean()).ordered().parse(r#"{"b": true, "a": false}"#).unwrap();
assert_eq!(ordered.keys().collect::<Vec<_>>(), ["a", "b"]);

Implementations§

Source§

impl<V> ZRecord<V>
where V: VldSchema,

Source

pub fn new(value_schema: V) -> ZRecord<V>

Create the schema (the same as its vld:: constructor function).

Source§

impl<V, K, M> ZRecord<V, K, M>
where V: VldSchema,

Source

pub fn min_keys(self, n: usize) -> ZRecord<V, K, M>

Minimum number of keys.

Source

pub fn max_keys(self, n: usize) -> ZRecord<V, K, M>

Maximum number of keys.

Source

pub fn ordered( self, ) -> ZRecord<V, K, BTreeMap<<K as RecordKey>::Output, <V as VldSchema>::Output>>
where K: RecordKey, <K as RecordKey>::Output: Ord,

Produce a BTreeMap (sorted by key) instead of a HashMap.

Trait Implementations§

Source§

impl<V, K, M> VldSchema for ZRecord<V, K, M>
where V: VldSchema, K: RecordKey, M: Default + Extend<(<K as RecordKey>::Output, <V as VldSchema>::Output)>,

Source§

type Output = M

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

fn parse_value(&self, value: &Value) -> Result<M, VldError>

Parse and validate a serde_json::Value.
Source§

fn parse_missing(&self) -> Result<Self::Output, VldError>

Parse an object field whose key is absent. Read more
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 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) -> bool
where T: Serialize,

Check if an existing Rust value passes this schema’s validation. Read more
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 rule<R>(self, rule: R) -> ZRule<Self, R>
where Self: Sized, R: Rule<Self::Output>,

Check the output with a reusable Rule (output type unchanged). Read more
Source§

fn rule_msg<R>(self, rule: R, msg: impl Into<String>) -> ZRule<Self, R>
where Self: Sized, R: Rule<Self::Output>,

rule with a custom error message.
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<V, K, M> Forget for ZRecord<V, K, M>

§

impl<V, K, M> Freeze for ZRecord<V, K, M>
where K: Freeze, V: Freeze, PhantomData<fn() -> M>: Freeze,

§

impl<V, K, M> RefUnwindSafe for ZRecord<V, K, M>

§

impl<V, K, M> Send for ZRecord<V, K, M>
where K: Send, V: Send, PhantomData<fn() -> M>: Send,

§

impl<V, K, M> Sync for ZRecord<V, K, M>
where K: Sync, V: Sync, PhantomData<fn() -> M>: Sync,

§

impl<V, K, M> Unpin for ZRecord<V, K, M>
where K: Unpin, V: Unpin, PhantomData<fn() -> M>: Unpin,

§

impl<V, K, M> UnsafeUnpin for ZRecord<V, K, M>

§

impl<V, K, M> UnwindSafe for ZRecord<V, K, M>

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> DynSchema for T
where T: VldSchema, <T as VldSchema>::Output: Serialize,

Source§

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>

VldSchema::parse_missing of the erased schema.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more