Provide LockedOutputProxy which holds locked variants of Stdout/Stderr
This commit is contained in:
parent
0b593d6635
commit
3cb7372b67
1 changed files with 50 additions and 0 deletions
|
@ -64,3 +64,53 @@ impl Debug for OutputProxy {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl OutputProxy {
|
||||||
|
pub fn lock(&self) -> LockedOutputProxy {
|
||||||
|
match *self {
|
||||||
|
OutputProxy::Out(ref r) => {
|
||||||
|
LockedOutputProxy::Out(r.lock())
|
||||||
|
},
|
||||||
|
OutputProxy::Err(ref r) => {
|
||||||
|
LockedOutputProxy::Err(r.lock())
|
||||||
|
},
|
||||||
|
OutputProxy::Sink => LockedOutputProxy::Sink,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum LockedOutputProxy<'a> {
|
||||||
|
Out(::std::io::StdoutLock<'a>),
|
||||||
|
Err(::std::io::StderrLock<'a>),
|
||||||
|
Sink,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Write for LockedOutputProxy<'a> {
|
||||||
|
fn write(&mut self, buf: &[u8]) -> ::std::io::Result<usize> {
|
||||||
|
match *self {
|
||||||
|
LockedOutputProxy::Out(ref mut r) => r.write(buf),
|
||||||
|
LockedOutputProxy::Err(ref mut r) => r.write(buf),
|
||||||
|
LockedOutputProxy::Sink => Ok(0),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn flush(&mut self) -> ::std::io::Result<()> {
|
||||||
|
match *self {
|
||||||
|
LockedOutputProxy::Out(ref mut r) => r.flush(),
|
||||||
|
LockedOutputProxy::Err(ref mut r) => r.flush(),
|
||||||
|
LockedOutputProxy::Sink => Ok(()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Debug for LockedOutputProxy<'a> {
|
||||||
|
fn fmt(&self, f: &mut ::std::fmt::Formatter) -> Result<(), ::std::fmt::Error> {
|
||||||
|
match *self {
|
||||||
|
LockedOutputProxy::Out(..) => write!(f, "LockedOutputProxy(Stdout)"),
|
||||||
|
LockedOutputProxy::Err(..) => write!(f, "LockedOutputProxy(Stderr)"),
|
||||||
|
LockedOutputProxy::Sink => write!(f, "LockedOutputProxy(Sink)"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue