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 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 for s in state.elems {
53 }
55 let expanded = quote! {
56 #router.with(AddData::new(""))
57 };
58
59 TokenStream::from(expanded)
60}