pipeline_script/core/
app.rs

1use crate::core::engine::Engine;
2use crate::plugin::Plugin;
3use crate::postprocessor::Visitor;
4use std::ffi::c_void;
5use std::path::{Path, PathBuf};
6
7pub struct App {
8    engine: Engine,
9    path: PathBuf,
10}
11impl App {
12    pub fn new() -> Self {
13        Self {
14            engine: Engine::default(),
15            path: PathBuf::default(),
16        }
17    }
18    #[allow(unused)]
19    pub fn register_external_function(mut self, name: &str, func: *mut c_void) -> Self {
20        self.engine.register_external_function(name, func);
21        self
22    }
23    pub fn set_test_llvm(mut self, test: bool) -> Self {
24        self.engine.set_test_llvm(test);
25        self
26    }
27    pub fn add_test_llvm_file(mut self, path: impl AsRef<Path>) -> Self {
28        self.engine.add_test_llvm_file(path);
29        self
30    }
31    #[allow(unused)]
32    pub fn register_visitor(mut self, visitor: impl Visitor + 'static) -> Self {
33        self.engine.register_visitor(visitor);
34        self
35    }
36    pub fn add_plugin(mut self, plugin: impl Plugin) -> Self {
37        plugin.apply(&mut self.engine);
38        self
39    }
40    pub fn run(&mut self) {
41        if self.engine.test_llvm {
42            for file in self.engine.test_llvm_files.iter() {
43                self.engine.run_llvm_file(file);
44            }
45        } else {
46            self.engine.run_file(self.path.clone())
47        }
48    }
49    pub fn set_entry_file(mut self, path: impl AsRef<Path>) -> Self {
50        self.path = path.as_ref().to_path_buf();
51        self
52    }
53}