use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, Expr, Token};
use syn::punctuated::Punctuated;
#[proc_macro]
pub fn color (input: TokenStream) -> TokenStream {
let args: Punctuated<Expr, Token![,]> = parse_macro_input!(input with Punctuated::parse_terminated);
let string = &args[0];
let variants: Vec <_> = args.iter().skip(1).map(|ident| quote! { ColorType::#ident }).collect();
if variants.len() == 1 {
let arg = &args[1];
return TokenStream::from (quote! {
#string.colorize(ColorType::#arg)
})
}
TokenStream::from (quote! {
#string.colorizes(vec![#(#variants),*])
})
}
#[proc_macro]
pub fn send_sync (input: TokenStream) -> TokenStream {
let args: Punctuated<Expr, Token![,]> = parse_macro_input!(input with Punctuated::parse_terminated);
let value = &args[0];
TokenStream::from (quote! {
std::sync::Arc::new(parking_lot::RwLock::new(#value))
})
}