1mod expand;
2mod parse;
3mod utils;
4
5use proc_macro::TokenStream;
6use syn::Error;
7
8fn parse_expand(is_mut: bool, attr: TokenStream, item: TokenStream) -> TokenStream {
9 let output = parse::parse(is_mut, attr.into(), item.into())
10 .and_then(expand::expand)
11 .unwrap_or_else(Error::into_compile_error);
12 #[cfg(feature = "debug")]
13 utils::debug(output.clone()).unwrap();
14 output.into()
15}
16
17#[proc_macro_attribute]
18pub fn impl_expr(attr: TokenStream, item: TokenStream) -> TokenStream {
19 parse_expand(false, attr, item)
20}
21
22#[proc_macro_attribute]
23pub fn impl_expr_mut(attr: TokenStream, item: TokenStream) -> TokenStream {
24 parse_expand(true, attr, item)
25}