1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use proc_macro::TokenStream;
use quote::quote;
use syn::parse_macro_input;

mod cents;
mod main_;
mod mode_system;
mod node;

#[proc_macro]
pub fn cents(input: TokenStream) -> TokenStream {
    let cents = parse_macro_input!(input as cents::Cents);
    quote!(#cents).into()
}

#[proc_macro]
pub fn mode_system(input: TokenStream) -> TokenStream {
    let system = parse_macro_input!(input as mode_system::ModeSystem);
    quote!(#system).into()
}

#[proc_macro_attribute]
pub fn main(_args: TokenStream, input: TokenStream) -> TokenStream {
    let main = parse_macro_input!(input as main_::Main);
    quote!(#main).into()
}

#[proc_macro_derive(Node, attributes(node, input, buffer))]
pub fn derive_processor(input: TokenStream) -> TokenStream {
    let input = parse_macro_input!(input as syn::DeriveInput);
    node::Node::parse(&input).into()
}