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