From 7ab34825ad868f4237eae576dd7c300823f907e2 Mon Sep 17 00:00:00 2001 From: Philippe Loctaux Date: Wed, 8 Mar 2023 00:15:34 +0100 Subject: [PATCH] id: implement rocket FromParam --- crates/ezidam/src/id.rs | 16 ++++++++++++++++ crates/ezidam/src/lib.rs | 1 + crates/ezidam/src/routes.rs | 3 ++- crates/id/Cargo.toml | 1 + crates/id/src/user.rs | 9 ++++++++- 5 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 crates/ezidam/src/id.rs diff --git a/crates/ezidam/src/id.rs b/crates/ezidam/src/id.rs new file mode 100644 index 0000000..14b32a9 --- /dev/null +++ b/crates/ezidam/src/id.rs @@ -0,0 +1,16 @@ +use id::UserID; +use rocket::request::FromParam; +use rocket::serde::{Deserialize, Serialize}; +use std::str::FromStr; + +#[derive(Serialize, Deserialize)] +#[serde(crate = "rocket::serde")] +pub struct RocketUserID(pub UserID); + +impl<'r> FromParam<'r> for RocketUserID { + type Error = id::Error; + + fn from_param(param: &'r str) -> Result { + UserID::from_str(param).map(RocketUserID) + } +} diff --git a/crates/ezidam/src/lib.rs b/crates/ezidam/src/lib.rs index 41b30cd..9a076b8 100644 --- a/crates/ezidam/src/lib.rs +++ b/crates/ezidam/src/lib.rs @@ -5,6 +5,7 @@ mod database; mod error; mod file_from_bytes; mod guards; +mod id; mod page; mod response_timer; mod routes; diff --git a/crates/ezidam/src/routes.rs b/crates/ezidam/src/routes.rs index b9d9ab8..710562c 100644 --- a/crates/ezidam/src/routes.rs +++ b/crates/ezidam/src/routes.rs @@ -8,9 +8,10 @@ pub(self) mod prelude { pub use crate::error::Error; pub use crate::file_from_bytes::FileFromBytes; pub use crate::guards::*; + pub use crate::id::*; pub use crate::page::{FlashKind, Page}; pub use hash::Password; - pub use id::UserID; + pub use id::*; pub use rocket::form::Form; pub use rocket::request::FlashMessage; pub use rocket::response::Flash; diff --git a/crates/id/Cargo.toml b/crates/id/Cargo.toml index 8975ca9..1157e8b 100644 --- a/crates/id/Cargo.toml +++ b/crates/id/Cargo.toml @@ -7,3 +7,4 @@ edition = "2021" thiserror = { workspace = true } nanoid = "0.4.0" nanoid-dictionary = "0.4.3" +serde = { version = "1", features = ["derive"] } \ No newline at end of file diff --git a/crates/id/src/user.rs b/crates/id/src/user.rs index 5a3c69f..07146b3 100644 --- a/crates/id/src/user.rs +++ b/crates/id/src/user.rs @@ -1,12 +1,13 @@ use super::Error; use nanoid::nanoid; use nanoid_dictionary::NOLOOKALIKES; +use serde::{Deserialize, Serialize}; use std::fmt::{Display, Formatter}; use std::str::FromStr; const LENGTH: usize = 15; -#[derive(Debug, Clone, PartialEq)] +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] pub struct UserID(pub String); impl Display for UserID { @@ -21,6 +22,12 @@ impl Default for UserID { } } +impl AsRef for UserID { + fn as_ref(&self) -> &str { + self.0.as_ref() + } +} + impl FromStr for UserID { type Err = Error;