Skip to main content

ValidationError

Struct ValidationError 

Source
pub struct ValidationError { /* private fields */ }
Expand description

A lightweight validation failure with a machine-readable code and a human-readable message.

ValidationError is the default error returned by the simple validators in this crate and the recommended starting point for hand-written ones. It is Copy, holds no owned data, and never allocates, which keeps it usable on a hot path and in no_std builds alike.

The code is meant to be a stable, lowercase identifier you can match on ("non_empty", "out_of_range"); the message is meant for logs and end-user diagnostics. Keep the code stable across releases even if you reword the message.

Under the std feature it implements std::error::Error, so it slots into ? and Box<dyn Error> chains without ceremony.

§Examples

Construct one directly and inspect its parts:

use type_lib::ValidationError;

let err = ValidationError::new("non_empty", "value must not be empty");
assert_eq!(err.code(), "non_empty");
assert_eq!(err.message(), "value must not be empty");

Branch on the stable code while showing the message to a human:

use type_lib::ValidationError;

fn describe(err: &ValidationError) -> &'static str {
    match err.code() {
        "non_empty" => "the field was left blank",
        "out_of_range" => "the number is outside the allowed range",
        _ => "the value is invalid",
    }
}

let err = ValidationError::new("out_of_range", "expected 1..=10, got 42");
assert_eq!(describe(&err), "the number is outside the allowed range");

Format it for display (the Display output is "<code>: <message>"):

use type_lib::ValidationError;

let err = ValidationError::new("non_empty", "value must not be empty");
assert_eq!(err.to_string(), "non_empty: value must not be empty");

Implementations§

Source§

impl ValidationError

Source

pub const fn new(code: &'static str, message: &'static str) -> Self

Creates a validation error from a stable code and a human-readable message.

This is a const fn, so errors can be declared as associated constants or statics and reused without per-call construction cost.

§Examples
use type_lib::ValidationError;

const EMPTY: ValidationError =
    ValidationError::new("non_empty", "value must not be empty");
assert_eq!(EMPTY.code(), "non_empty");
Source

pub const fn code(&self) -> &'static str

Returns the stable, machine-readable error code.

Use this to branch programmatically; it is intended to stay stable across releases even when the message changes.

§Examples
use type_lib::ValidationError;

let err = ValidationError::new("non_empty", "value must not be empty");
assert_eq!(err.code(), "non_empty");
Source

pub const fn message(&self) -> &'static str

Returns the human-readable message.

Intended for logs and diagnostics, not for matching; the wording may change between releases.

§Examples
use type_lib::ValidationError;

let err = ValidationError::new("non_empty", "value must not be empty");
assert_eq!(err.message(), "value must not be empty");

Trait Implementations§

Source§

impl Clone for ValidationError

Source§

fn clone(&self) -> ValidationError

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ValidationError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for ValidationError

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Error for ValidationError

Available on crate feature std only.
1.30.0 · Source§

fn source(&self) -> Option<&(dyn Error + 'static)>

Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§

fn description(&self) -> &str

👎Deprecated since 1.42.0:

use the Display impl or to_string()

1.0.0 · Source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

Source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type-based access to context intended for error reports. Read more
Source§

impl Hash for ValidationError

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for ValidationError

Source§

fn eq(&self, other: &ValidationError) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for ValidationError

Source§

impl Eq for ValidationError

Source§

impl StructuralPartialEq for ValidationError

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
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.