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