tokio_childstream/
commandext.rs

1use crate::ChildStream;
2use tokio::process::Command;
3
4/// Extend [tokio::process::Command] to enable spawning a child directly into a [ChildStream]
5pub trait CommandExt {
6    /// Spawn a child process and convert it into a [ChildStream] with `line_buffering` optionally enabled
7    ///
8    /// See [ChildStream] for a description of line-buffering.
9    fn spawn_stream(&mut self, line_buffering: bool) -> std::io::Result<ChildStream>;
10}
11
12impl CommandExt for Command {
13    fn spawn_stream(&mut self, line_buffering: bool) -> std::io::Result<ChildStream> {
14        use std::process::Stdio;
15
16        self.stdout(Stdio::piped())
17            .stderr(Stdio::piped())
18            .spawn()
19            .map(|c| ChildStream::new(c, line_buffering))
20    }
21}