fl2rust_macro/
lib.rs

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}