Trait rocket::http::uri::FromUriParam [−][src]
pub trait FromUriParam<P, T> where
P: UriPart, { type Target: UriDisplay<P>; fn from_uri_param(param: T) -> Self::Target; }
Expand description
Conversion trait for parameters used in uri! invocations.
Overview
In addition to implementing UriDisplay, to use a custom type in a uri!
expression, the FromUriParam trait must be implemented. The UriDisplay
derive automatically generates identity implementations of FromUriParam,
so in the majority of cases, as with UriDisplay, this trait is never
implemented manually.
In the rare case that UriDisplay is implemented manually, this trait, too,
must be implemented explicitly. In the majority of cases, implementation can
be automated. Rocket provides the impl_from_uri_param_identity macro to
generate the identity implementations automatically. For a type T, these
are:
impl<P: UriPart> FromUriParam<P, T> for Timpl<'x, P: UriPart> FromUriParam<P, &'x T> for Timpl<'x, P: UriPart> FromUriParam<P, &'x mut T> for T
See impl_from_uri_param_identity for usage details.
Code Generation
This trait is invoked once per expression passed into a uri! invocation.
In particular, for a route URI parameter of type T and a user-supplied
expression of type S, <T as FromUriParam<S>>::from_uri_param is
invoked. The returned value is used in place of the user’s value and
rendered using its UriDisplay implementation.
This trait allows types that differ from the route URI parameter’s types to
be used in their place at no cost. For instance, the following
implementation, provided by Rocket, allows an &str to be used in a uri!
invocation for route URI parameters declared as String:
impl<'a, P: UriPart> FromUriParam<P, &'a str> for String { type Target = &'a str; }
Because the FromUriParam::Target type is the same as the input type, the
conversion is a no-op and free of cost, allowing an &str to be used in
place of a String without penalty. A similar no-op conversion exists for
&RawStr:
impl<'a, 'b, P: UriPart> FromUriParam<P, &'a str> for &'b RawStr { type Target = &'a str; }
Provided Implementations
The following types have identity implementations:
String,i8,i16,i32,i64,i128,isize,u8,u16,u32,u64,u128,usize,f32,f64,bool,IpAddr,Ipv4Addr,Ipv6Addr,&str,&RawStr,Cow<str>
The following conversions are implemented, allowing a value of the type on the left to be used when a type on the right is expected by a route:
&strtoString&strtoRawStrStringto&strStringtoRawStrTtoOption<T>TtoResult<T, E>TtoForm<T>
The following types have identity implementations only in Path:
&Path,PathBuf
The following conversions are implemented only in Path:
&strto&Path&strtoPathBufPathBufto&Path
See Foreign Impls for all provided implementations.
Implementing
This trait should only be implemented when you’d like to allow a type
different from the route’s declared type to be used in its place in a uri!
invocation. For instance, if the route has a type of T and you’d like to
use a type of S in a uri! invocation, you’d implement FromUriParam<P, T> for S where P is Path for conversions valid in the path part of a
URI, Uri for conversions valid in the query part of a URI, or P: UriPart
when a conversion is valid in either case.
This is typically only warranted for owned-value types with corresponding
reference types: String and &str, for instance. In this case, it’s
desirable to allow an &str to be used in place of a String.
When implementing FromUriParam, be aware that Rocket will use the
UriDisplay implementation of FromUriParam::Target, not of the
source type. Incorrect implementations can result in creating unsafe URIs.
Example
The following example implements FromUriParam<Query, (&str, &str)> for a
User type. The implementation allows an (&str, &str) type to be used in
a uri! invocation where a User type is expected in the query part of the
URI.
use std::fmt; use rocket::http::RawStr; use rocket::http::uri::{Formatter, UriDisplay, FromUriParam, Query}; #[derive(FromForm)] struct User<'a> { name: &'a RawStr, nickname: String, } impl<'a> UriDisplay<Query> for User<'a> { fn fmt(&self, f: &mut Formatter<Query>) -> fmt::Result { f.write_named_value("name", &self.name)?; f.write_named_value("nickname", &self.nickname) } } impl<'a, 'b> FromUriParam<Query, (&'a str, &'b str)> for User<'a> { type Target = User<'a>; fn from_uri_param((name, nickname): (&'a str, &'b str)) -> User<'a> { User { name: name.into(), nickname: nickname.to_string() } } }
With these implementations, the following typechecks:
use rocket::http::RawStr; use rocket::request::Form; #[post("/<name>?<user..>")] fn some_route(name: &RawStr, user: Form<User>) { /* .. */ } let uri = uri!(some_route: name = "hey", user = ("Robert Mike", "Bob")); assert_eq!(uri.path(), "/hey"); assert_eq!(uri.query(), Some("name=Robert%20Mike&nickname=Bob"));
Associated Types
type Target: UriDisplay<P>[src]
type Target: UriDisplay<P>[src]The resulting type of this conversion.
Required methods
fn from_uri_param(param: T) -> Self::Target[src]
fn from_uri_param(param: T) -> Self::Target[src]Converts a value of type T into a value of type Self::Target. The
resulting value of type Self::Target will be rendered into a URI using
its UriDisplay implementation.
Implementations on Foreign Types
impl<'x, P> FromUriParam<P, &'x i128> for i128 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x i128> for i128 where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x f64> for f64 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x f64> for f64 where
P: UriPart, [src]impl<P> FromUriParam<P, u128> for u128 where
P: UriPart, [src]
impl<P> FromUriParam<P, u128> for u128 where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut i32> for i32 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut i32> for i32 where
P: UriPart, [src]impl<'x, 'a> FromUriParam<Path, &'x PathBuf> for &'a Path[src]
impl<'x, 'a> FromUriParam<Path, &'x PathBuf> for &'a Path[src]impl<'x, 'a, P> FromUriParam<P, &'x mut &'a str> for String where
P: UriPart, [src]
impl<'x, 'a, P> FromUriParam<P, &'x mut &'a str> for String where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x u32> for u32 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x u32> for u32 where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x f32> for f32 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x f32> for f32 where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut f64> for f64 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut f64> for f64 where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x i8> for i8 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x i8> for i8 where
P: UriPart, [src]impl<P, A, E, T> FromUriParam<P, A> for Result<T, E> where
T: FromUriParam<P, A>,
P: UriPart, [src]
impl<P, A, E, T> FromUriParam<P, A> for Result<T, E> where
T: FromUriParam<P, A>,
P: UriPart, [src]A no cost conversion allowing T to be used in place of an Result<T, E>.
type Target = <T as FromUriParam<P, A>>::Target
pub fn from_uri_param(param: A) -> <Result<T, E> as FromUriParam<P, A>>::Target[src]
impl<'x, P> FromUriParam<P, &'x i16> for i16 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x i16> for i16 where
P: UriPart, [src]impl<P> FromUriParam<P, u8> for u8 where
P: UriPart, [src]
impl<P> FromUriParam<P, u8> for u8 where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x IpAddr> for IpAddr where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x IpAddr> for IpAddr where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut u16> for u16 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut u16> for u16 where
P: UriPart, [src]impl<'x, 'a> FromUriParam<Path, &'x mut &'a Path> for PathBuf[src]
impl<'x, 'a> FromUriParam<Path, &'x mut &'a Path> for PathBuf[src]impl<'a> FromUriParam<Path, &'a Path> for PathBuf[src]
impl<'a> FromUriParam<Path, &'a Path> for PathBuf[src]impl<'x, P> FromUriParam<P, &'x u8> for u8 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x u8> for u8 where
P: UriPart, [src]impl<P> FromUriParam<P, i8> for i8 where
P: UriPart, [src]
impl<P> FromUriParam<P, i8> for i8 where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x i32> for i32 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x i32> for i32 where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut i64> for i64 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut i64> for i64 where
P: UriPart, [src]impl<'x, 'a, P> FromUriParam<P, &'x &'a str> for &'a str where
P: UriPart, [src]
impl<'x, 'a, P> FromUriParam<P, &'x &'a str> for &'a str where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut u128> for u128 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut u128> for u128 where
P: UriPart, [src]impl<P> FromUriParam<P, u16> for u16 where
P: UriPart, [src]
impl<P> FromUriParam<P, u16> for u16 where
P: UriPart, [src]impl<P> FromUriParam<P, u32> for u32 where
P: UriPart, [src]
impl<P> FromUriParam<P, u32> for u32 where
P: UriPart, [src]impl<'x, 'a, P> FromUriParam<P, &'x String> for &'a str where
P: UriPart, [src]
impl<'x, 'a, P> FromUriParam<P, &'x String> for &'a str where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut u8> for u8 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut u8> for u8 where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut i16> for i16 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut i16> for i16 where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut u64> for u64 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut u64> for u64 where
P: UriPart, [src]impl<P> FromUriParam<P, i32> for i32 where
P: UriPart, [src]
impl<P> FromUriParam<P, i32> for i32 where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x u64> for u64 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x u64> for u64 where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut bool> for bool where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut bool> for bool where
P: UriPart, [src]impl<'x> FromUriParam<Path, &'x PathBuf> for PathBuf[src]
impl<'x> FromUriParam<Path, &'x PathBuf> for PathBuf[src]impl<'x, P> FromUriParam<P, &'x mut String> for String where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut String> for String where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x usize> for usize where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x usize> for usize where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut IpAddr> for IpAddr where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut IpAddr> for IpAddr where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut u32> for u32 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut u32> for u32 where
P: UriPart, [src]impl<'a, 'b> FromUriParam<Path, &'a &'b str> for PathBuf[src]
impl<'a, 'b> FromUriParam<Path, &'a &'b str> for PathBuf[src]A no cost conversion allowing an &&str to be used in place of a PathBuf.
impl<P> FromUriParam<P, f64> for f64 where
P: UriPart, [src]
impl<P> FromUriParam<P, f64> for f64 where
P: UriPart, [src]impl<'x, 'a> FromUriParam<Path, &'x &'a Path> for PathBuf[src]
impl<'x, 'a> FromUriParam<Path, &'x &'a Path> for PathBuf[src]impl<P> FromUriParam<P, usize> for usize where
P: UriPart, [src]
impl<P> FromUriParam<P, usize> for usize where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut i128> for i128 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut i128> for i128 where
P: UriPart, [src]impl<'x, 'a> FromUriParam<Path, &'x mut &'a Path> for &'a Path[src]
impl<'x, 'a> FromUriParam<Path, &'x mut &'a Path> for &'a Path[src]impl<P> FromUriParam<P, Ipv6Addr> for Ipv6Addr where
P: UriPart, [src]
impl<P> FromUriParam<P, Ipv6Addr> for Ipv6Addr where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x u16> for u16 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x u16> for u16 where
P: UriPart, [src]impl<'a> FromUriParam<Path, PathBuf> for &'a Path[src]
impl<'a> FromUriParam<Path, PathBuf> for &'a Path[src]impl<'x, P> FromUriParam<P, &'x mut Ipv4Addr> for Ipv4Addr where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut Ipv4Addr> for Ipv4Addr where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x i64> for i64 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x i64> for i64 where
P: UriPart, [src]impl<'a, P> FromUriParam<P, &'a str> for String where
P: UriPart, [src]
impl<'a, P> FromUriParam<P, &'a str> for String where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x String> for String where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x String> for String where
P: UriPart, [src]impl<'x, 'a> FromUriParam<Path, &'x &'a Path> for &'a Path[src]
impl<'x, 'a> FromUriParam<Path, &'x &'a Path> for &'a Path[src]impl<P> FromUriParam<P, i64> for i64 where
P: UriPart, [src]
impl<P> FromUriParam<P, i64> for i64 where
P: UriPart, [src]impl<P> FromUriParam<P, String> for String where
P: UriPart, [src]
impl<P> FromUriParam<P, String> for String where
P: UriPart, [src]impl<P> FromUriParam<P, IpAddr> for IpAddr where
P: UriPart, [src]
impl<P> FromUriParam<P, IpAddr> for IpAddr where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x isize> for isize where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x isize> for isize where
P: UriPart, [src]impl<P> FromUriParam<P, u64> for u64 where
P: UriPart, [src]
impl<P> FromUriParam<P, u64> for u64 where
P: UriPart, [src]impl<P> FromUriParam<P, f32> for f32 where
P: UriPart, [src]
impl<P> FromUriParam<P, f32> for f32 where
P: UriPart, [src]impl FromUriParam<Path, PathBuf> for PathBuf[src]
impl FromUriParam<Path, PathBuf> for PathBuf[src]impl<'x> FromUriParam<Path, &'x mut PathBuf> for PathBuf[src]
impl<'x> FromUriParam<Path, &'x mut PathBuf> for PathBuf[src]impl<'x, 'a> FromUriParam<Path, &'x mut PathBuf> for &'a Path[src]
impl<'x, 'a> FromUriParam<Path, &'x mut PathBuf> for &'a Path[src]impl<P, A, T> FromUriParam<P, A> for Option<T> where
T: FromUriParam<P, A>,
P: UriPart, [src]
impl<P, A, T> FromUriParam<P, A> for Option<T> where
T: FromUriParam<P, A>,
P: UriPart, [src]A no cost conversion allowing any T to be used in place of an Option<T>.
type Target = <T as FromUriParam<P, A>>::Target
pub fn from_uri_param(param: A) -> <Option<T> as FromUriParam<P, A>>::Target[src]
impl<'x, P> FromUriParam<P, &'x mut f32> for f32 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut f32> for f32 where
P: UriPart, [src]impl<'a, P> FromUriParam<P, &'a str> for &'a str where
P: UriPart, [src]
impl<'a, P> FromUriParam<P, &'a str> for &'a str where
P: UriPart, [src]impl<'x, 'a, P> FromUriParam<P, &'x mut &'a str> for &'a str where
P: UriPart, [src]
impl<'x, 'a, P> FromUriParam<P, &'x mut &'a str> for &'a str where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x u128> for u128 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x u128> for u128 where
P: UriPart, [src]impl<'a, P> FromUriParam<P, String> for &'a str where
P: UriPart, [src]
impl<'a, P> FromUriParam<P, String> for &'a str where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut usize> for usize where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut usize> for usize where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x Ipv4Addr> for Ipv4Addr where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x Ipv4Addr> for Ipv4Addr where
P: UriPart, [src]impl<'a> FromUriParam<Path, &'a Path> for &'a Path[src]
impl<'a> FromUriParam<Path, &'a Path> for &'a Path[src]impl<'x, P> FromUriParam<P, &'x mut isize> for isize where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut isize> for isize where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x Ipv6Addr> for Ipv6Addr where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x Ipv6Addr> for Ipv6Addr where
P: UriPart, [src]impl<'x, 'a, P> FromUriParam<P, &'x &'a str> for String where
P: UriPart, [src]
impl<'x, 'a, P> FromUriParam<P, &'x &'a str> for String where
P: UriPart, [src]impl<'a> FromUriParam<Path, &'a str> for PathBuf[src]
impl<'a> FromUriParam<Path, &'a str> for PathBuf[src]A no cost conversion allowing an &str to be used in place of a PathBuf.
impl<'x, P> FromUriParam<P, &'x mut i8> for i8 where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut i8> for i8 where
P: UriPart, [src]impl<P> FromUriParam<P, isize> for isize where
P: UriPart, [src]
impl<P> FromUriParam<P, isize> for isize where
P: UriPart, [src]impl<P> FromUriParam<P, bool> for bool where
P: UriPart, [src]
impl<P> FromUriParam<P, bool> for bool where
P: UriPart, [src]impl<P> FromUriParam<P, Ipv4Addr> for Ipv4Addr where
P: UriPart, [src]
impl<P> FromUriParam<P, Ipv4Addr> for Ipv4Addr where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x mut Ipv6Addr> for Ipv6Addr where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x mut Ipv6Addr> for Ipv6Addr where
P: UriPart, [src]impl<P> FromUriParam<P, i16> for i16 where
P: UriPart, [src]
impl<P> FromUriParam<P, i16> for i16 where
P: UriPart, [src]impl<'x, P> FromUriParam<P, &'x bool> for bool where
P: UriPart, [src]
impl<'x, P> FromUriParam<P, &'x bool> for bool where
P: UriPart, [src]impl<P> FromUriParam<P, i128> for i128 where
P: UriPart, [src]
impl<P> FromUriParam<P, i128> for i128 where
P: UriPart, [src]impl<'x, 'a, P> FromUriParam<P, &'x mut String> for &'a str where
P: UriPart, [src]
impl<'x, 'a, P> FromUriParam<P, &'x mut String> for &'a str where
P: UriPart, [src]Implementors
impl<'a, 'b, P> FromUriParam<P, &'a str> for &'b RawStr where
P: UriPart, [src]
impl<'a, 'b, P> FromUriParam<P, &'a str> for &'b RawStr where
P: UriPart, [src]impl<'a, P> FromUriParam<P, &'a RawStr> for &'a RawStr where
P: UriPart, [src]
impl<'a, P> FromUriParam<P, &'a RawStr> for &'a RawStr where
P: UriPart, [src]impl<'a, P> FromUriParam<P, String> for &'a RawStr where
P: UriPart, [src]
impl<'a, P> FromUriParam<P, String> for &'a RawStr where
P: UriPart, [src]impl<'f, A, T: FromUriParam<Query, A> + FromForm<'f>> FromUriParam<Query, A> for Form<T>[src]
impl<'f, A, T: FromUriParam<Query, A> + FromForm<'f>> FromUriParam<Query, A> for Form<T>[src]impl<'f, A, T: FromUriParam<Query, A> + FromForm<'f>> FromUriParam<Query, A> for LenientForm<T>[src]
impl<'f, A, T: FromUriParam<Query, A> + FromForm<'f>> FromUriParam<Query, A> for LenientForm<T>[src]impl<'x, 'a, 'b, P> FromUriParam<P, &'x &'a str> for &'b RawStr where
P: UriPart, [src]
impl<'x, 'a, 'b, P> FromUriParam<P, &'x &'a str> for &'b RawStr where
P: UriPart, [src]impl<'x, 'a, 'b, P> FromUriParam<P, &'x mut &'a str> for &'b RawStr where
P: UriPart, [src]
impl<'x, 'a, 'b, P> FromUriParam<P, &'x mut &'a str> for &'b RawStr where
P: UriPart, [src]impl<'x, 'a, P> FromUriParam<P, &'x &'a RawStr> for &'a RawStr where
P: UriPart, [src]
impl<'x, 'a, P> FromUriParam<P, &'x &'a RawStr> for &'a RawStr where
P: UriPart, [src]impl<'x, 'a, P> FromUriParam<P, &'x String> for &'a RawStr where
P: UriPart, [src]
impl<'x, 'a, P> FromUriParam<P, &'x String> for &'a RawStr where
P: UriPart, [src]impl<'x, 'a, P> FromUriParam<P, &'x mut &'a RawStr> for &'a RawStr where
P: UriPart, [src]
impl<'x, 'a, P> FromUriParam<P, &'x mut &'a RawStr> for &'a RawStr where
P: UriPart, [src]