1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
use super::config::{Config, ProcessorConfig}; use super::pool::Pool; use super::processor::Processor; use crate::core::LennaImage; pub struct Pipeline { config: Config, pool: Pool, } impl Pipeline { pub fn new(config: Config, pool: Pool) -> Pipeline { Pipeline { config, pool } } pub fn run(&self, image: &mut Box<LennaImage>) -> Result<(), Box<dyn std::error::Error>> { for processor_config in &self.config.pipeline { let id = processor_config.id.clone().to_string(); let processor = self.pool.get(&id); self.process(processor_config.clone(), image, processor) .unwrap(); } Ok(()) } pub fn process( &self, config: ProcessorConfig, image: &mut Box<LennaImage>, processor: Option<Box<dyn Processor>>, ) -> Result<(), Box<dyn std::error::Error>> { match processor { Some(mut processor) => processor.process(config, image), _ => Ok(()), } } } impl Default for Pipeline { fn default() -> Self { Pipeline { config: Config::default(), pool: Pool::default(), } } }