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
#![feature(proc_macro_hygiene)]

#[macro_use] extern crate quote;
//#[macro_use] extern crate syn;
#[macro_use] extern crate log;
#[macro_use] extern crate pest_derive;
#[macro_use] extern crate json;

extern crate proc_macro;
extern crate proc_macro2;
extern crate pest;

mod generators;

use std::fs;
use proc_macro::{TokenStream};

#[proc_macro_attribute]
pub fn controller(_attrs: TokenStream, input: TokenStream) -> TokenStream {
    // TODO
    input
}

#[proc_macro_attribute]
pub fn atrax_app(attrs: TokenStream, _input: TokenStream) -> TokenStream {
    let filename = attrs.to_string();
    let body = fs::read_to_string(&filename)
        .expect(&format!("Something went wrong reading {}", &filename)[..]);
    let mut app_token = generators::app_generator::AppGenerator::new(body);
    let stream: proc_macro::TokenStream = app_token.generate().parse().unwrap();
    stream
}