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;