Trait validators::prelude::validators_prelude::FromFormValue [−][src]
pub trait FromFormValue<'v> { type Error; pub fn from_form_value(form_value: &'v RawStr) -> Result<Self, Self::Error>; pub fn default() -> Option<Self> { ... } }
Trait to parse a typed value from a form value.
This trait is used by Rocket’s code generation in two places:
- Fields in structs deriving
FromForm
are required to implement this trait. - Types of dynamic query parameters (
?<param>
) are required to implement this trait.
FromForm
Fields
When deriving the FromForm
trait, Rocket uses the FromFormValue
implementation of each field’s type to validate the form input. To
illustrate, consider the following structure:
#[derive(FromForm)] struct Person { name: String, age: u16 }
The FromForm
implementation generated by Rocket will call
String::from_form_value
for the name
field, and u16::from_form_value
for the age
field. The Person
structure can only be created from a form
if both calls return successfully.
Dynamic Query Parameters
Types of dynamic query parameters are required to implement this trait. The
FromFormValue
implementation is used to parse and validate each parameter
according to its target type:
#[get("/item?<id>&<size>")] fn item(id: usize, size: Size) { /* ... */ }
To generate values for id
and size
, Rocket calls
usize::from_form_value()
and Size::from_form_value()
, respectively.
Validation Errors
It is sometimes desired to prevent a validation error from forwarding a
request to another route. The FromFormValue
implementation for Option<T>
and Result<T, T::Error>
make this possible. Their implementations always
return successfully, effectively “catching” the error.
For instance, if we wanted to know if a user entered an invalid age
in the
form corresponding to the Person
structure in the first example, we could
use the following structure:
struct Person<'r> { name: String, age: Result<u16, &'r RawStr> }
The Err
value in this case is &RawStr
since u16::from_form_value
returns a Result<u16, &RawStr>
.
Provided Implementations
Rocket implements FromFormValue
for many standard library types. Their
behavior is documented here.
-
- Primitive types: f32, f64, isize, i8, i16, i32, i64, i128, usize, u8, u16, u32, u64, u128
IpAddr
andSocketAddr
types: IpAddr, Ipv4Addr, Ipv6Addr, SocketAddrV4, SocketAddrV6, SocketAddrNonZero*
types: NonZeroI8, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI128, NonZeroIsize, NonZeroU8, NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU128, NonZeroUsize
A value is validated successfully if the
from_str
method for the given type returns successfully. Otherwise, the raw form value is returned as theErr
value. -
bool
A value is validated successfully as
true
if the the form value is"true"
or"on"
, and as afalse
value if the form value is"false"
,"off"
, or not present. In any other case, the raw form value is returned in theErr
value. -
This implementation always returns successfully.
The raw, undecoded string is returned directly without modification.
-
String
URL decodes the form value. If the decode is successful, the decoded string is returned. Otherwise, an
Err
with the original form value is returned. -
Option<T> where T: FromFormValue
This implementation always returns successfully.
The form value is validated by
T
’sFromFormValue
implementation. If the validation succeeds, aSome(validated_value)
is returned. Otherwise, aNone
is returned. -
Result<T, T::Error> where T: FromFormValue
This implementation always returns successfully.
The from value is validated by
T
’sFromFormvalue
implementation. The returnedResult
value is returned.
Example
This trait is generally implemented to parse and validate form values. While
Rocket provides parsing and validation for many of the standard library
types such as u16
and String
, you can implement FromFormValue
for a
custom type to get custom validation.
Imagine you’d like to verify that some user is over some age in a form. You
might define a new type and implement FromFormValue
as follows:
use rocket::request::FromFormValue; use rocket::http::RawStr; struct AdultAge(usize); impl<'v> FromFormValue<'v> for AdultAge { type Error = &'v RawStr; fn from_form_value(form_value: &'v RawStr) -> Result<AdultAge, &'v RawStr> { match form_value.parse::<usize>() { Ok(age) if age >= 21 => Ok(AdultAge(age)), _ => Err(form_value), } } }
The type can then be used in a FromForm
struct as follows:
#[derive(FromForm)] struct Person { name: String, age: AdultAge }
A form using the Person
structure as its target will only parse and
validate if the age
field contains a usize
greater than 21
.
Associated Types
type Error
[src]
The associated error which can be returned from parsing. It is a good
idea to have the return type be or contain an &'v str
so that the
unparseable string can be examined after a bad parse.
Required methods
pub fn from_form_value(form_value: &'v RawStr) -> Result<Self, Self::Error>
[src]
Parses an instance of Self
from an HTTP form field value or returns an
Error
if one cannot be parsed.
Provided methods
pub fn default() -> Option<Self>
[src]
Returns a default value to be used when the form field does not exist.
If this returns None
, then the field is required. Otherwise, this
should return Some(default_value)
. The default implementation simply
returns None
.
Implementations on Foreign Types
impl<'v> FromFormValue<'v> for i64
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<i64, <i64 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<i64, <i64 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for u8
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<u8, <u8 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<u8, <u8 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for NonZeroI128
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<NonZeroI128, <NonZeroI128 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<NonZeroI128, <NonZeroI128 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for NonZeroU16
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<NonZeroU16, <NonZeroU16 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<NonZeroU16, <NonZeroU16 as FromFormValue<'v>>::Error>
impl<'v, T> FromFormValue<'v> for Result<T, <T as FromFormValue<'v>>::Error> where
T: FromFormValue<'v>,
[src]
T: FromFormValue<'v>,
type Error = !
pub fn from_form_value(
v: &'v RawStr
) -> Result<Result<T, <T as FromFormValue<'v>>::Error>, <Result<T, <T as FromFormValue<'v>>::Error> as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<Result<T, <T as FromFormValue<'v>>::Error>, <Result<T, <T as FromFormValue<'v>>::Error> as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for NonZeroI8
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<NonZeroI8, <NonZeroI8 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<NonZeroI8, <NonZeroI8 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for i128
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<i128, <i128 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<i128, <i128 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for SocketAddrV4
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<SocketAddrV4, <SocketAddrV4 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<SocketAddrV4, <SocketAddrV4 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for NonZeroUsize
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<NonZeroUsize, <NonZeroUsize as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<NonZeroUsize, <NonZeroUsize as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for isize
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<isize, <isize as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<isize, <isize as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for NonZeroIsize
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<NonZeroIsize, <NonZeroIsize as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<NonZeroIsize, <NonZeroIsize as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for SocketAddrV6
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<SocketAddrV6, <SocketAddrV6 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<SocketAddrV6, <SocketAddrV6 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for NonZeroU64
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<NonZeroU64, <NonZeroU64 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<NonZeroU64, <NonZeroU64 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for NonZeroI64
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<NonZeroI64, <NonZeroI64 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<NonZeroI64, <NonZeroI64 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for usize
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<usize, <usize as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<usize, <usize as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for i8
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<i8, <i8 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<i8, <i8 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for u32
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<u32, <u32 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<u32, <u32 as FromFormValue<'v>>::Error>
impl<'v, T> FromFormValue<'v> for Option<T> where
T: FromFormValue<'v>,
[src]
T: FromFormValue<'v>,
type Error = !
pub fn from_form_value(
v: &'v RawStr
) -> Result<Option<T>, <Option<T> as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<Option<T>, <Option<T> as FromFormValue<'v>>::Error>
pub fn default() -> Option<Option<T>>
[src]
impl<'v> FromFormValue<'v> for NonZeroI32
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<NonZeroI32, <NonZeroI32 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<NonZeroI32, <NonZeroI32 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for NonZeroI16
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<NonZeroI16, <NonZeroI16 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<NonZeroI16, <NonZeroI16 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for u16
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<u16, <u16 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<u16, <u16 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for u64
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<u64, <u64 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<u64, <u64 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for f64
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<f64, <f64 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<f64, <f64 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for i16
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<i16, <i16 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<i16, <i16 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for NonZeroU32
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<NonZeroU32, <NonZeroU32 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<NonZeroU32, <NonZeroU32 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for NonZeroU8
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<NonZeroU8, <NonZeroU8 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<NonZeroU8, <NonZeroU8 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for u128
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<u128, <u128 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<u128, <u128 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for bool
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<bool, <bool as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<bool, <bool as FromFormValue<'v>>::Error>
pub fn default() -> Option<bool>
[src]
impl<'v> FromFormValue<'v> for i32
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<i32, <i32 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<i32, <i32 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for f32
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<f32, <f32 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<f32, <f32 as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for SocketAddr
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<SocketAddr, <SocketAddr as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<SocketAddr, <SocketAddr as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for NonZeroU128
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<NonZeroU128, <NonZeroU128 as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<NonZeroU128, <NonZeroU128 as FromFormValue<'v>>::Error>
Implementors
impl<'v> FromFormValue<'v> for &'v RawStr
[src]
type Error = !
pub fn from_form_value(
v: &'v RawStr
) -> Result<&'v RawStr, <&'v RawStr as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<&'v RawStr, <&'v RawStr as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for IpAddr
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<IpAddr, <IpAddr as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<IpAddr, <IpAddr as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for Ipv4Addr
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<Ipv4Addr, <Ipv4Addr as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<Ipv4Addr, <Ipv4Addr as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for Ipv6Addr
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<Ipv6Addr, <Ipv6Addr as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<Ipv6Addr, <Ipv6Addr as FromFormValue<'v>>::Error>
impl<'v> FromFormValue<'v> for String
[src]
type Error = &'v RawStr
pub fn from_form_value(
v: &'v RawStr
) -> Result<String, <String as FromFormValue<'v>>::Error>
[src]
v: &'v RawStr
) -> Result<String, <String as FromFormValue<'v>>::Error>