diff --git a/src/lib.rs b/src/lib.rs index 90555ad..ef37600 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,6 @@ use proc_macro::TokenStream; use quote::quote; -use syn::{parse_macro_input, ItemEnum, DeriveInput, Fields, Data}; +use syn::{parse_macro_input, Lit, ItemEnum, DeriveInput, Fields, Data}; #[proc_macro_derive(HttpRequest, attributes(http_get))] pub fn derive_http_get_request(input: TokenStream) -> TokenStream { @@ -23,6 +23,7 @@ pub fn derive_http_get_request(input: TokenStream) -> TokenStream { } } let base_url = base_url.expect("Missing #[http_get(url = \"...\")] attribute"); + let base_url_lit = Lit::Str(syn::LitStr::new(&base_url, proc_macro2::Span::call_site())); let expanded = match &input.data { Data::Struct(data_struct) => { @@ -47,7 +48,7 @@ pub fn derive_http_get_request(input: TokenStream) -> TokenStream { impl Queryable for #name { fn send( &self, - base_url: &str, + _base_url: &str, // not used headers: Option>, ) -> Result { use urlencoding::encode; @@ -56,7 +57,7 @@ pub fn derive_http_get_request(input: TokenStream) -> TokenStream { let mut query_params: Vec<(String, String)> = Vec::new(); #(#query_param_code)* - let mut url = base_url.to_string(); + let mut url = #base_url_lit.to_string(); if !query_params.is_empty() { let query_parts: Vec = query_params.iter() .map(|(k, v)| format!("{}={}", k, encode(v))) @@ -98,7 +99,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(base_url, headers.clone()), + #name::#vname(inner) => inner.send(#base_url_lit, headers.clone()), }); } _ => panic!("#[derive(HttpRequest)] enum variants must have a single unnamed field"), @@ -109,7 +110,7 @@ pub fn derive_http_get_request(input: TokenStream) -> TokenStream { impl Queryable for #name { fn send( &self, - base_url: &str, + _base_url: &str, // not used headers: Option>, ) -> Result { match self {