use proc_macro::TokenStream;
use quote::quote;
use syn::{ItemFn, parse_macro_input};
pub fn inner_with_com(attr: TokenStream, item: TokenStream) -> TokenStream {
let model = if attr.is_empty() {
quote! { ::callcomapi_runtime::ComModel::STA }
} else {
let lit = parse_macro_input!(attr as syn::LitStr);
let s = lit.value();
match s.to_uppercase().as_str() {
"MTA" | "MULTI" | "MULTITHREADED" => {
quote! { ::callcomapi_runtime::ComModel::MTA }
}
"STA" | "APARTMENT" | "APARTMENTTHREADED" => {
quote! { ::callcomapi_runtime::ComModel::STA }
}
_ => {
quote! { ::callcomapi_runtime::ComModel::STA }
}
}
};
let func = parse_macro_input!(item as ItemFn);
let vis = &func.vis;
let sig = &func.sig;
let block = &func.block;
let expanded = quote! {
#vis #sig {
let _com_guard = unsafe {
::callcomapi_runtime::init_com(#model)
};
#block
}
};
expanded.into()
}