quake_processor/
process_engine.rs1use 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}