Expand description
Form field validation routines.
Each function in this module can be used as the target of the
field(validate)
field attribute of the FromForm
derive.
use rocket::form::FromForm;
#[derive(FromForm)]
struct MyForm<'r> {
#[field(validate = range(2..10))]
id: usize,
#[field(validate = omits("password"))]
password: &'r str,
}
The validate
parameter takes any expression that returns a
form::Result<()>
. If the expression is a function
call, a reference to the field is inserted as the first parameter. Thus,
functions calls to validate
must take a reference to some type,
typically a generic with some bounds, as their first argument.
Custom Error Messages
To set a custom error messages, it is useful to chain results:
use rocket::form::{Errors, Error, FromForm};
#[derive(FromForm)]
struct MyForm<'r> {
// By defining another function...
#[field(validate = omits("password").map_err(pass_help))]
password: &'r str,
// or inline using the `msg` helper. `or_else` inverts the validator
#[field(validate = omits("password").or_else(msg!("please omit `password`")))]
password2: &'r str,
// You can even refer to the field in the message...
#[field(validate = range(1..).or_else(msg!("`{}` < 1", self.n)))]
n: isize,
// ..or other fields!
#[field(validate = range(..self.n).or_else(msg!("`{}` > `{}`", self.z, self.n)))]
z: isize,
}
fn pass_help<'a>(errors: Errors<'_>) -> Errors<'a> {
Error::validation("passwords can't contain the text \"password\"").into()
}
Custom Validation
Custom validation routines can be defined as regular functions. Consider a routine that tries to validate a credit card number:
extern crate time;
use rocket::form::{self, FromForm, Error};
#[derive(FromForm)]
struct CreditCard {
#[field(validate = luhn(self.cvv, &self.expiration))]
number: u64,
cvv: u16,
expiration: time::Date,
}
// Implementation of Luhn validator.
fn luhn<'v>(number: &u64, cvv: u16, exp: &time::Date) -> form::Result<'v, ()> {
if !valid {
Err(Error::validation("invalid credit card number"))?;
}
Ok(())
}
Macros
- A helper macro for custom validation error messages.
Traits
- Types for values that contain items.
- Types for values that have a length.
Functions
- Contains validator: succeeds when a value contains
item
. - Debug contains validator: like
contains()
but mentionsitem
in the error message. - Debug equality validator: like
eq()
but mentionsb
in the error message. - Debug omits validator: like
omits()
but mentionsitem
in the error message. - File type validator: succeeds when a
TempFile
has the Content-Typecontent_type
. - Length validator: succeeds when the length of a value is within a
range
. - Omits validator: succeeds when a value does not contains
item
. error message. - Contains one of validator: succeeds when a value contains at least one item in an
items
iterator. - Integer range validator: succeeds when an integer value is within a range.
- Try With validator: succeeds when an arbitrary function or closure does.
- With validator: succeeds when an arbitrary function or closure does.