jocker_lib/command/
util.rs1use 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}