aboutsummaryrefslogtreecommitdiff
path: root/src/output/pipeline.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/output/pipeline.rs')
-rw-r--r--src/output/pipeline.rs27
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);
+ }
+}