1#![doc = include_str!("../README.md")]
2
3extern crate proc_macro;
4use proc_macro::TokenStream;
5use fluid_parser::lexer::Lexer;
6use fluid_parser::parser::Parser;
7
8#[proc_macro]
9pub fn include_ui(input: TokenStream) -> TokenStream {
10 let input = input.to_string();
11 let path = std::path::PathBuf::from(&input[1..input.len() - 1]);
12 let input = std::fs::read_to_string(&path).unwrap();
13 let lexer = Lexer::new(&input);
14 let mut parser = Parser::new(lexer);
15 let ast = parser.parse().unwrap();
16 let old_cwd = std::env::current_dir().unwrap();
17 let _ = std::env::set_current_dir(std::path::PathBuf::from(&path).parent().unwrap()).unwrap();
18 let out = fl2rust::gen::generate(&ast);
19 let _ = std::env::set_current_dir(old_cwd);
20 out.parse().unwrap()
21}
22
23#[proc_macro]
24pub fn build_ui(input: TokenStream) -> TokenStream {
25 let input = input.to_string();
26 let lexer = Lexer::new(&input);
27 let mut parser = Parser::new(lexer);
28 let ast = parser.parse().unwrap();
29 let out = fl2rust::gen::generate(&ast);
30 out.parse().unwrap()
31}