1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mod attributes;
mod controller;

use crate::attributes::ControllerAttributes;
use crate::controller::generate_controller;
use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, Error, Item};

#[proc_macro_attribute]
pub fn controller(args: TokenStream, input: TokenStream) -> TokenStream {
    let args = parse_macro_input!(args as ControllerAttributes);
    let item = parse_macro_input!(input as Item);
    let controller = generate_controller(item, &args).unwrap_or_else(Error::into_compile_error);

    (quote! {
        #controller
    })
    .into()
}