jocker_lib/command/
util.rs

1use tokio::{
2    io::{AsyncBufReadExt, BufReader},
3    process::Child,
4};
5
6use crate::error::Result;
7
8#[expect(async_fn_in_trait)]
9pub trait CommandLogger {
10    async fn log_to_console(&mut self) -> Result<()>;
11}
12
13impl CommandLogger for Child {
14    async fn log_to_console(&mut self) -> Result<()> {
15        if let Some(stdout) = self.stdout.take() {
16            tokio::spawn(async {
17                let mut stdout_reader = BufReader::new(stdout).lines();
18                while let Ok(Some(line)) = stdout_reader.next_line().await {
19                    println!("{}", line);
20                }
21            });
22        }
23        if let Some(stderr) = self.stderr.take() {
24            tokio::spawn(async {
25                let mut stderr_reader = BufReader::new(stderr).lines();
26                while let Ok(Some(line)) = stderr_reader.next_line().await {
27                    println!("{}", line);
28                }
29            });
30        }
31        Ok(())
32    }
33}