1use std::io::Write;
6
7#[derive(Debug, Default, Clone, Copy)]
13pub struct UnbufferedStdout;
14
15impl Write for UnbufferedStdout {
16 fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
17 if buf.is_empty() {
18 return Ok(0);
19 }
20 let ret = unsafe {
21 libc::write(libc::STDOUT_FILENO, buf.as_ptr() as *const libc::c_void, buf.len())
22 };
23 if ret < 0 { Err(std::io::Error::last_os_error()) } else { Ok(ret as usize) }
24 }
25
26 fn flush(&mut self) -> std::io::Result<()> {
27 Ok(())
28 }
29}
30
31impl Write for &UnbufferedStdout {
32 fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
33 if buf.is_empty() {
34 return Ok(0);
35 }
36 let ret = unsafe {
37 libc::write(libc::STDOUT_FILENO, buf.as_ptr() as *const libc::c_void, buf.len())
38 };
39 if ret < 0 { Err(std::io::Error::last_os_error()) } else { Ok(ret as usize) }
40 }
41
42 fn flush(&mut self) -> std::io::Result<()> {
43 Ok(())
44 }
45}