From f0d7e70e1718c820193f1254d2cfd354efe7d2ad Mon Sep 17 00:00:00 2001 From: buckn Date: Tue, 8 Jul 2025 20:09:08 -0400 Subject: [PATCH] update, added fields to send() fn --- src/lib.rs | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 3e62974..5319ee2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,7 +12,6 @@ pub fn derive_http_get_request(input: TokenStream) -> TokenStream { let name = input.ident; let expanded = match &input.data { - // ---- Struct: Build .send() that builds and sends the GET request Data::Struct(data_struct) => { let fields = match &data_struct.fields { Fields::Named(named) => &named.named, @@ -38,16 +37,21 @@ pub fn derive_http_get_request(input: TokenStream) -> TokenStream { pub async fn send( &self, base_url: &str, - headers: Option> + headers: Option>, + pgp_key: Option<&str>, + api_key: Option<&str>, ) -> Result { use awc::Client; use urlencoding::encode; - // Collect query parameters let mut query_params: Vec<(String, String)> = Vec::new(); #(#query_param_code)* - // Build URL with query string + // Add optional api_key to query string + if let Some(key) = api_key { + query_params.push(("api_key".to_string(), key.to_string())); + } + let mut url = base_url.to_string(); if !query_params.is_empty() { let mut query_parts = Vec::new(); @@ -58,18 +62,20 @@ pub fn derive_http_get_request(input: TokenStream) -> TokenStream { url.push_str(&query_parts.join("&")); } - // Prepare client and request let client = Client::default(); let mut request = client.get(url); - // Optional headers if let Some(hdrs) = headers { for (k, v) in hdrs { request = request.append_header((k, v)); } } - // Send the request + // Add PGP key as a custom header, if provided + if let Some(pgp) = pgp_key { + request = request.append_header(("X-PGP-Key", pgp)); + } + let response = request.send().await?; Ok(response) } @@ -77,7 +83,7 @@ pub fn derive_http_get_request(input: TokenStream) -> TokenStream { } } - // ---- Enum: Match each variant and call .send() on the inner type + // Enum handling unchanged... Data::Enum(data_enum) => { let mut variant_arms = Vec::new(); for variant in &data_enum.variants { @@ -85,7 +91,7 @@ pub fn derive_http_get_request(input: TokenStream) -> TokenStream { match &variant.fields { Fields::Unnamed(fields) if fields.unnamed.len() == 1 => { variant_arms.push(quote! { - #name::#vname(inner) => inner.send().await, + #name::#vname(inner) => inner.send(base_url, headers.clone(), pgp_key, api_key).await, }); } _ => panic!( @@ -96,8 +102,13 @@ pub fn derive_http_get_request(input: TokenStream) -> TokenStream { quote! { impl #name { - /// Calls `.send()` on the wrapped query variant. - pub async fn send(&self) -> Result { + pub async fn send( + &self, + base_url: &str, + headers: Option>, + pgp_key: Option<&str>, + api_key: Option<&str>, + ) -> Result { match self { #(#variant_arms)* }