about summary refs log tree commit diff
path: root/src/libtest/helpers/sink.rs
blob: aa7fe2487730e3aa28b451ef91bd35103fda7aea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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(())
    }
}