mirror of https://github.com/rwf2/Rocket.git
Implement FromFormValue for contrib UUID.
This commit is contained in:
parent
0e82eb0b31
commit
266c62fb22
|
@ -4,13 +4,12 @@ use std::fmt;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|
||||||
use rocket::request::FromParam;
|
use rocket::request::{FromParam, FromFormValue};
|
||||||
|
|
||||||
pub use self::uuid_ext::ParseError as UuidParseError;
|
pub use self::uuid_ext::ParseError as UuidParseError;
|
||||||
|
|
||||||
/// The UUID type, which implements `FromParam`. This type allows you to accept
|
/// Implements `FromParam` and `FormFormValue` for accepting UUID values from
|
||||||
/// values from the [Uuid](https://github.com/rust-lang-nursery/uuid) crate as a
|
/// the [uuid](https://github.com/rust-lang-nursery/uuid) crate.
|
||||||
/// dynamic parameter in your request handlers.
|
|
||||||
///
|
///
|
||||||
/// # Usage
|
/// # Usage
|
||||||
///
|
///
|
||||||
|
@ -32,6 +31,19 @@ pub use self::uuid_ext::ParseError as UuidParseError;
|
||||||
/// format!("We found: {}", id)
|
/// format!("We found: {}", id)
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
|
///
|
||||||
|
/// You can also use the `UUID` as a form value, including in query strings:
|
||||||
|
///
|
||||||
|
/// ```rust,ignore
|
||||||
|
/// #[derive(FromForm)]
|
||||||
|
/// struct UserQuery {
|
||||||
|
/// id: UUID
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// #[post("/user?<user_query>")]
|
||||||
|
/// fn user(user_query: UserQuery) -> String {
|
||||||
|
/// format!("User ID: {}", user_query.id)
|
||||||
|
/// }
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug)]
|
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Debug)]
|
||||||
pub struct UUID(uuid_ext::Uuid);
|
pub struct UUID(uuid_ext::Uuid);
|
||||||
|
|
||||||
|
@ -68,11 +80,21 @@ impl fmt::Display for UUID {
|
||||||
impl<'a> FromParam<'a> for UUID {
|
impl<'a> FromParam<'a> for UUID {
|
||||||
type Error = UuidParseError;
|
type Error = UuidParseError;
|
||||||
|
|
||||||
/// A value is successfully parsed if the `str` is a properly formatted
|
/// A value is successfully parsed if `param` is a properly formatted UUID.
|
||||||
/// UUID. Otherwise, a `UuidParseError` is returned.
|
/// Otherwise, a `UuidParseError` is returned.
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
fn from_param(p: &'a str) -> Result<UUID, Self::Error> {
|
fn from_param(param: &'a str) -> Result<UUID, Self::Error> {
|
||||||
p.parse()
|
param.parse()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'v> FromFormValue<'v> for UUID {
|
||||||
|
type Error = &'v str;
|
||||||
|
|
||||||
|
/// A value is successfully parsed if `form_value` is a properly formatted
|
||||||
|
/// UUID. Otherwise, the raw form value is returned.
|
||||||
|
fn from_form_value(form_value: &'v str) -> Result<UUID, &'v str> {
|
||||||
|
form_value.parse().map_err(|_| form_value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue