| use tokio_io::AsyncWrite; |
| |
| use futures::Poll; |
| |
| use std::io::{self, Stderr as StdStderr, Write}; |
| |
| /// A handle to the standard error stream of a process. |
| /// |
| /// The handle implements the [`AsyncWrite`] trait, but beware that concurrent |
| /// writes to `Stderr` must be executed with care. |
| /// |
| /// Created by the [`stderr`] function. |
| /// |
| /// [`stderr`]: fn.stderr.html |
| /// [`AsyncWrite`]: trait.AsyncWrite.html |
| #[derive(Debug)] |
| pub struct Stderr { |
| std: StdStderr, |
| } |
| |
| /// Constructs a new handle to the standard error of the current process. |
| /// |
| /// The returned handle allows writing to standard error from the within the |
| /// Tokio runtime. |
| pub fn stderr() -> Stderr { |
| let std = io::stderr(); |
| Stderr { std } |
| } |
| |
| impl Write for Stderr { |
| fn write(&mut self, buf: &[u8]) -> io::Result<usize> { |
| ::would_block(|| self.std.write(buf)) |
| } |
| |
| fn flush(&mut self) -> io::Result<()> { |
| ::would_block(|| self.std.flush()) |
| } |
| } |
| |
| impl AsyncWrite for Stderr { |
| fn shutdown(&mut self) -> Poll<(), io::Error> { |
| Ok(().into()) |
| } |
| } |