quake_processor/
process_engine.rs

1use std::collections::HashMap;
2use std::error::Error;
3use std::path::Path;
4
5use crate::pdf_processor::PdfProcessor;
6
7pub trait Processor {
8    fn content(&self, file: &Path) -> Result<String, Box<dyn Error>>;
9    fn meta_data(&self) -> HashMap<String, String>;
10}
11
12#[derive(Default)]
13pub struct EmptyProcessor {}
14
15impl Processor for EmptyProcessor {
16    fn content(&self, _file: &Path) -> Result<String, Box<dyn Error>> {
17        Ok("".to_string())
18    }
19
20    fn meta_data(&self) -> HashMap<String, String> {
21        todo!()
22    }
23}
24
25pub struct ProcessEngine {}
26
27impl ProcessEngine {
28    pub fn engine(text: &str) -> Box<dyn Processor> {
29        let processor: Box<dyn Processor> = match text {
30            "pdf" => Box::new(PdfProcessor::default()),
31            _ => Box::new(EmptyProcessor::default()),
32        };
33
34        processor
35    }
36}
37
38#[cfg(test)]
39mod tests {
40    use std::path::PathBuf;
41
42    use crate::process_engine::ProcessEngine;
43
44    #[test]
45    fn it_works() {
46        let file = PathBuf::from("_fixtures").join("Test_PDF.pdf");
47        let processor = ProcessEngine::engine("pdf");
48        match processor.content(&file) {
49            Err(err) => {
50                println!("{:?}", err);
51                panic!();
52            }
53            Ok(some) => {
54                println!("{:?}", some);
55            }
56        }
57    }
58}