turtle_build/infrastructure/console/
os.rs1use crate::infrastructure::Console;
2use async_trait::async_trait;
3use core::error::Error;
4use tokio::io::{AsyncWriteExt, Stderr, Stdout, stderr, stdout};
5
6#[derive(Debug)]
8pub struct OsConsole {
9 stdout: Stdout,
10 stderr: Stderr,
11}
12
13impl OsConsole {
14 pub fn new() -> Self {
16 Self {
17 stdout: stdout(),
18 stderr: stderr(),
19 }
20 }
21}
22
23impl Default for OsConsole {
24 fn default() -> Self {
25 Self::new()
26 }
27}
28
29#[async_trait]
30impl Console for OsConsole {
31 async fn write_stdout(&mut self, src: &[u8]) -> Result<(), Box<dyn Error>> {
32 self.stdout.write_all(src).await?;
33
34 Ok(())
35 }
36
37 async fn write_stderr(&mut self, src: &[u8]) -> Result<(), Box<dyn Error>> {
38 self.stderr.write_all(src).await?;
39
40 Ok(())
41 }
42
43 async fn flush(&mut self) -> Result<(), Box<dyn Error>> {
44 self.stdout.flush().await?;
45 self.stderr.flush().await?;
46
47 Ok(())
48 }
49}