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