diff options
Diffstat (limited to 'src/output/pipeline.rs')
-rw-r--r-- | src/output/pipeline.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/output/pipeline.rs b/src/output/pipeline.rs new file mode 100644 index 0000000..9b3c7e5 --- /dev/null +++ b/src/output/pipeline.rs @@ -0,0 +1,27 @@ +use super::{formats::Format, aggregators::Aggregator}; +use super::super::LogResult; + +use std::{io::Write, sync::Mutex}; + + +pub struct Pipeline { + format: Box<dyn Format>, + aggregator: Box<dyn Aggregator>, + writer: Mutex<Box<dyn Write>>, +} + + +impl Pipeline { + pub fn new<W: Write + 'static, F: Format + 'static, A: Aggregator + 'static>(writer: W, format: F, aggregator: A) -> Pipeline { + Pipeline { + format: Box::new(format), + aggregator: Box::new(aggregator), + writer: Mutex::new(Box::new(writer)), + } + } + + pub fn push_item(&self, item: &LogResult) { + let mut writer = self.writer.lock().unwrap(); + self.aggregator.push_item(item, &self.format, &mut *writer); + } +} |