use leon::{Item, Template};
use quote::quote;
use syn::{parse_macro_input, LitStr};
#[proc_macro]
pub fn template(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input = parse_macro_input!(input as LitStr).value();
#[allow(clippy::unnecessary_to_owned)]
let items = Template::parse(&input)
.unwrap()
.items
.into_owned()
.into_iter()
.map(|item| match item {
Item::Text(text) => quote! {
::leon::Item::Text(#text)
},
Item::Key(key) => quote! {
::leon::Item::Key(#key)
},
});
quote! {
::leon::Template::new(
{
const ITEMS: &'static [::leon::Item<'static>] = &[
#(#items),*
];
ITEMS
},
::core::option::Option::None,
)
}
.into()
}