1use analysis::visitor::ReVisitor;
2use codegen::generate;
3use parser::ReBlock;
4use petgraph::dot::Dot;
5use proc_macro::TokenStream;
6use syn::parse_macro_input;
7
8mod analysis;
9mod codegen;
10mod parser;
11
12#[proc_macro]
13pub fn rerust(input: TokenStream) -> TokenStream {
14 let input = parse_macro_input!(input as ReBlock);
15 let mut visitor = ReVisitor::new();
16 let result = visitor.visit_reblock(&input);
17 if result.is_err() {
18 return result.unwrap_err().to_compile_error().into();
19 }
20 let graph = visitor.reactive_graph();
21 generate(&graph).into()
23}