From f5ca56ef2d7608ef9dcedb95026e7b916bdb2c7b Mon Sep 17 00:00:00 2001 From: myyrakle Date: Tue, 27 Aug 2024 02:23:13 +0900 Subject: [PATCH] =?UTF-8?q?[#15]=20QueryStringDeserializer=20trait=20?= =?UTF-8?q?=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rupring/src/request.rs | 9 +++++++++ rupring_macro/src/lib.rs | 14 ++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/rupring/src/request.rs b/rupring/src/request.rs index 3a15fd1..9c2f7d4 100644 --- a/rupring/src/request.rs +++ b/rupring/src/request.rs @@ -27,6 +27,15 @@ impl Request { } } +#[derive(Debug, Clone)] +pub struct QueryString(pub Vec); + +pub trait QueryStringDeserializer: Sized { + type Error; + + fn deserialize(&self) -> Result; +} + #[derive(Debug, Clone)] pub struct ParamString(pub String); diff --git a/rupring_macro/src/lib.rs b/rupring_macro/src/lib.rs index ce448d4..e6d263d 100644 --- a/rupring_macro/src/lib.rs +++ b/rupring_macro/src/lib.rs @@ -893,6 +893,20 @@ pub fn derive_rupring_doc(item: TokenStream) -> TokenStream { .as_str(); } + for field_name in query_field_names { + request_bind_code += format!( + r#"{field_name}: rupring::ParamString( + request.query_parameters["{field_name}"].clone() + ). + deserialize(). + map_err( + |_|Err(rupring::anyhow::anyhow!("{field_name} is invalid")) + )?, + "# + ) + .as_str(); + } + request_bind_code += format!("}};").as_str(); request_bind_code += "Ok(bound)";