1#![forbid(unsafe_code)]
2mod input;
6mod memo;
7
8use proc_macro::TokenStream;
9
10#[proc_macro_attribute]
11pub fn input(attr: TokenStream, item: TokenStream) -> TokenStream {
12 let attr = proc_macro2::TokenStream::from(attr);
13 let item = syn::parse_macro_input!(item as syn::ItemStruct);
14 match input::expand(attr, item) {
15 Ok(tokens) => tokens.into(),
16 Err(err) => err.to_compile_error().into(),
17 }
18}
19
20#[proc_macro_attribute]
21pub fn memo(attr: TokenStream, item: TokenStream) -> TokenStream {
22 let item = syn::parse_macro_input!(item as syn::ItemFn);
23 let attr = proc_macro2::TokenStream::from(attr);
24 match memo::expand(attr, item) {
25 Ok(tokens) => tokens.into(),
26 Err(err) => err.to_compile_error().into(),
27 }
28}