pipeline_script/core/
app.rs1use 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}