diff options
Diffstat (limited to 'library/test/src/helpers/sink.rs')
| -rw-r--r-- | library/test/src/helpers/sink.rs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/library/test/src/helpers/sink.rs b/library/test/src/helpers/sink.rs new file mode 100644 index 00000000000..aa7fe248773 --- /dev/null +++ b/library/test/src/helpers/sink.rs @@ -0,0 +1,24 @@ +//! Module providing a helper structure to capture output in subprocesses. + +use std::{ + io, + io::prelude::Write, + sync::{Arc, Mutex}, +}; + +pub struct Sink(Arc<Mutex<Vec<u8>>>); + +impl Sink { + pub fn new_boxed(data: &Arc<Mutex<Vec<u8>>>) -> Box<Self> { + Box::new(Self(data.clone())) + } +} + +impl Write for Sink { + fn write(&mut self, data: &[u8]) -> io::Result<usize> { + Write::write(&mut *self.0.lock().unwrap(), data) + } + fn flush(&mut self) -> io::Result<()> { + Ok(()) + } +} |
