pub struct ZNumber { /* private fields */ }Expand description
Schema for number validation (f64). Created via vld::number().
Use .int() to convert to integer validation (i64).
NaN never satisfies a bound check, and .coerce() rejects strings that
parse to NaN or infinity.
§Example
use vld::prelude::*;
let schema = vld::number().min(0.0).max(100.0);
let int_schema = vld::number().int().min(0).max(100);Implementations§
Source§impl ZNumber
impl ZNumber
Sourcepub fn type_error(self, msg: impl Into<String>) -> ZNumber
pub fn type_error(self, msg: impl Into<String>) -> ZNumber
Set a custom error message for type mismatch (when the input is not a number).
§Example
use vld::prelude::*;
let schema = vld::number().type_error("Must be a number!");
let err = schema.parse(r#""hello""#).unwrap_err();
assert!(err.issues[0].message.contains("Must be a number!"));Sourcepub fn with_messages<F>(self, f: F) -> ZNumber
pub fn with_messages<F>(self, f: F) -> ZNumber
Override error messages in bulk by check key.
The closure receives the check key (e.g. "too_small", "too_big",
"not_positive", "not_multiple_of", "not_safe")
and should return Some(new_message) to replace, or None to keep the original.
The closure is consulted when an issue is built, so it covers checks
added before and after this call; a per-check message
(*_msg(...)) takes precedence over it. A later call replaces it.
§Example
use vld::prelude::*;
let schema = vld::number().min(0.0).max(100.0)
.with_messages(|key| match key {
"too_small" => Some("Must be >= 0".into()),
"too_big" => Some("Must be <= 100".into()),
_ => None,
});Sourcepub fn non_negative(self) -> ZNumber
pub fn non_negative(self) -> ZNumber
Must be non-negative (>= 0).
Sourcepub fn non_positive(self) -> ZNumber
pub fn non_positive(self) -> ZNumber
Must be non-positive (<= 0).
Sourcepub fn multiple_of(self, val: f64) -> ZNumber
pub fn multiple_of(self, val: f64) -> ZNumber
Must be a multiple of the given value.
Uses a relative tolerance of 1e-9 so decimal steps like 0.1 work.
A divisor of 0 never matches (every value is rejected).
Sourcepub fn safe(self) -> ZNumber
pub fn safe(self) -> ZNumber
Must be within JavaScript’s safe integer range (-(2^53 - 1) to 2^53 - 1).
Sourcepub fn int(self) -> ZInteger<i64>
pub fn int(self) -> ZInteger<i64>
Convert to integer validation. Returns ZInt with Output = i64.
Sourcepub fn coerce(self) -> ZNumber
pub fn coerce(self) -> ZNumber
Coerce strings and booleans to numbers.
Strings that parse to NaN or infinity are rejected.
Sourcepub fn clamp(self) -> ZNumber
pub fn clamp(self) -> ZNumber
Clamp values outside the inclusive bounds (min / max,
non_negative / non_positive) to the bound instead of failing.
Integer schemas also saturate to their type (u8: 0..=255), f32
to its finite range. Exclusive bounds (gt, lt, positive,
negative) still fail. The JSON Schema leaves out the clamped bounds.
use vld::prelude::*;
let volume = vld::number().int().min(0).max(100).clamp();
assert_eq!(volume.parse("150").unwrap(), 100);
assert_eq!(volume.parse("-5").unwrap(), 0);
assert_eq!(vld::u8().clamp().parse("300").unwrap(), 255u8);Trait Implementations§
Source§impl VldSchema for ZNumber
impl VldSchema for ZNumber
Source§fn parse_value(&self, value: &Value) -> Result<f64, VldError>
fn parse_value(&self, value: &Value) -> Result<f64, VldError>
serde_json::Value.Source§fn parse_missing(&self) -> Result<Self::Output, VldError>
fn parse_missing(&self) -> Result<Self::Output, VldError>
Source§fn parse<I>(&self, input: &I) -> Result<Self::Output, VldError>
fn parse<I>(&self, input: &I) -> Result<Self::Output, VldError>
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,
Source§fn is_valid<T>(&self, value: &T) -> boolwhere
T: Serialize,
fn is_valid<T>(&self, value: &T) -> boolwhere
T: Serialize,
Source§fn optional(self) -> ZOptional<Self>
fn optional(self) -> ZOptional<Self>
None.Source§fn with_default(self, value: Self::Output) -> ZDefault<Self>
fn with_default(self, value: Self::Output) -> ZDefault<Self>
Source§fn blank_as(self, value: Self::Output) -> ZDefault<Self>
fn blank_as(self, value: Self::Output) -> ZDefault<Self>
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>
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>
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>
Source§fn catch(self, fallback: Self::Output) -> ZCatch<Self>
fn catch(self, fallback: Self::Output) -> ZCatch<Self>
Source§fn pipe<S>(self, next: S) -> ZPipe<Self, S>
fn pipe<S>(self, next: S) -> ZPipe<Self, S>
Source§fn describe(self, description: &str) -> ZDescribe<Self>
fn describe(self, description: &str) -> ZDescribe<Self>
Source§fn super_refine<F>(self, check: F) -> ZSuperRefine<Self, F>
fn super_refine<F>(self, check: F) -> ZSuperRefine<Self, F>
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,
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,
Auto Trait Implementations§
impl !RefUnwindSafe for ZNumber
impl !UnwindSafe for ZNumber
impl Forget for ZNumber
impl Freeze for ZNumber
impl Send for ZNumber
impl Sync for ZNumber
impl Unpin for ZNumber
impl UnsafeUnpin for ZNumber
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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> ⓘ
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> ⓘ
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