bounce_macros/
lib.rs

1use proc_macro::TokenStream;
2use proc_macro_error::proc_macro_error;
3use syn::{parse_macro_input, DeriveInput, ItemFn};
4
5mod atom;
6mod future_notion;
7mod slice;
8
9#[proc_macro_derive(Atom, attributes(bounce))]
10#[proc_macro_error]
11pub fn atom(input: TokenStream) -> TokenStream {
12    let input = parse_macro_input!(input as DeriveInput);
13    atom::macro_fn(input).into()
14}
15
16#[proc_macro_derive(Slice, attributes(bounce))]
17#[proc_macro_error]
18pub fn slice(input: TokenStream) -> TokenStream {
19    let input = parse_macro_input!(input as DeriveInput);
20    slice::macro_fn(input).into()
21}
22
23#[proc_macro_attribute]
24pub fn future_notion(attr: TokenStream, item: TokenStream) -> TokenStream {
25    let item = parse_macro_input!(item as ItemFn);
26    let attr = parse_macro_input!(attr as future_notion::FutureNotionAttr);
27
28    future_notion::macro_fn(attr, item).into()
29}