fl2rust/
lib.rs

1#![doc = include_str!("../README.md")]
2#![allow(clippy::needless_doctest_main)]
3
4pub mod gen;
5mod utils;
6
7use fluid_parser::lexer::Lexer;
8use fluid_parser::parser::Parser;
9use std::error;
10use std::fs;
11use std::path::*;
12
13/// Generator struct
14#[derive(Default)]
15pub struct Generator {}
16
17impl Generator {
18    /// Takes an input and output files
19    pub fn in_out<P: AsRef<Path>>(
20        &self,
21        inpath: P,
22        outpath: P,
23    ) -> Result<(), Box<dyn error::Error>> {
24        let content = fs::read_to_string(&inpath)?;
25        let lexer = Lexer::new(&content);
26        let mut parser = Parser::new(lexer);
27        let old_cwd = std::env::current_dir().unwrap();
28        let _ = std::env::set_current_dir(inpath.as_ref().parent().unwrap()).unwrap();
29        let out = gen::generate(&parser.parse());
30        let _ = std::env::set_current_dir(old_cwd);
31        fs::write(outpath, out)?;
32        Ok(())
33    }
34
35    /// Takes an input and output files
36    pub fn in_out_with_directives_preamble<P: AsRef<Path>>(
37        &self,
38        inpath: P,
39        outpath: P,
40    ) -> Result<(), Box<dyn error::Error>> {
41        let content = fs::read_to_string(&inpath)?;
42        let lexer = Lexer::new(&content);
43        let mut parser = Parser::new(lexer);
44        let old_cwd = std::env::current_dir().unwrap();
45        let _ = std::env::set_current_dir(inpath.as_ref().parent().unwrap()).unwrap();
46        let out = gen::generate_with_directives_preamble(&parser.parse());
47        let _ = std::env::set_current_dir(old_cwd);
48        fs::write(
49            outpath,
50            out,
51        )?;
52        Ok(())
53    }
54}
55
56#[cfg(test)]
57mod tests {
58    #[test]
59    fn it_works() {
60        use super::*;
61        let g = Generator::default();
62        g.in_out("fl_tests/fl.fl", "fl_tests/fl.rs")
63            .expect("Failed to generate rust from fl file!");
64        g.in_out("fl_tests/fl2.fl", "fl_tests/fl2.rs")
65            .expect("Failed to generate rust from fl file!");
66        g.in_out("fl_tests/unt.fl", "fl_tests/unt.rs")
67            .expect("Failed to generate rust from fl file!");
68    }
69}