#![allow(dead_code)]
#[macro_use]
extern crate quote;
#[macro_use]
mod attribute;
#[proc_macro_attribute]
pub fn actix_web_variant_config(
args: proc_macro::TokenStream,
input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
if cfg!(feature = "actix_web") {
attribute::actix_web::variant_config(args.into(), input.into()).into()
} else {
input
}
}
#[proc_macro_attribute]
pub fn axum_variant_config(
args: proc_macro::TokenStream,
input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
if cfg!(feature = "axum") {
attribute::axum::variant_config(args.into(), input.into()).into()
} else {
input
}
}
#[proc_macro_attribute]
pub fn rocket_variant_config(
args: proc_macro::TokenStream,
input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
if cfg!(feature = "rocket") {
attribute::rocket::variant_config(args.into(), input.into()).into()
} else {
input
}
}
pub(crate) fn extract_file_path(
args: proc_macro2::TokenStream,
) -> (Option<String>, Option<String>) {
let att_meta = &syn::parse2::<devise::MetaItem>(args.into()).unwrap();
match att_meta {
devise::MetaItem::List {
path: _,
delimiter: _,
items,
} => match items.first().unwrap() {
devise::MetaItem::Tokens(ts) => {
let lit_str: syn::LitStr = syn::parse2(ts.clone()).unwrap();
(Some(lit_str.value()), None)
}
devise::MetaItem::KeyValue {
path,
eq: _,
tokens,
} if path.get_ident().unwrap().to_string().to_lowercase() == "file" => {
let lit_str: syn::LitStr = syn::parse2(tokens.clone()).unwrap();
(None, Some(lit_str.value()))
}
_ => (None, None),
},
_ => (None, None),
}
}