north_derives/
lib.rs

1#[macro_use]
2extern crate syn;
3extern crate proc_macro;
4use quote::{quote, quote_spanned};
5use syn::parse::{Parse, ParseStream, Result};
6use syn::spanned::Spanned;
7use proc_macro::TokenStream;
8use syn::{parse_macro_input, Expr, ExprArray, Ident, Token, parse_quote};
9use north_common::state::NorthStateData;
10
11struct PoemBeauty {
12    router: Ident,
13    state: ExprArray,
14}
15
16impl Parse for PoemBeauty {
17    fn parse(input: ParseStream) -> Result<Self> {
18        let router: Ident = input.parse()?;
19        input.parse::<Token![,]>()?;
20
21        let state= input.parse::<ExprArray>()?;
22
23        // let stmt: Stmt = parse_quote! {
24        //     #state
25        // };
26
27        Ok(PoemBeauty {
28            router,
29            state
30        })
31    }
32}
33
34
35#[proc_macro]
36pub fn process_poem(input: TokenStream) -> TokenStream {
37    let PoemBeauty { router, state, .. } = parse_macro_input!(input as PoemBeauty);
38
39    process_poem_impl(router, state)
40}
41
42fn process_poem_impl(router: Ident, state: ExprArray) -> TokenStream {
43    // println!("******************************");
44    // println!("Helllo sdsd");
45    // println!("******************************");
46
47
48    // let assert_sync = quote_spanned! {ty.span()=>
49    //    state.span()
50    // };
51
52    for s in state.elems {
53        // println!("Helllo yessss");
54    }
55    let expanded = quote! {
56        #router.with(AddData::new(""))
57    };
58
59    TokenStream::from(expanded)
60}