maybe_fut/api/io/
empty.rs1use std::io::SeekFrom;
2
3use super::{Read, Seek, Write};
4
5#[derive(Debug, Clone, Copy, Default)]
9pub struct Empty;
10
11impl Write for Empty {
12 async fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
13 Ok(buf.len())
15 }
16
17 async fn flush(&mut self) -> std::io::Result<()> {
18 Ok(())
20 }
21}
22
23impl Seek for Empty {
24 async fn seek(&mut self, _pos: SeekFrom) -> std::io::Result<u64> {
25 Ok(0)
27 }
28}
29
30impl Read for Empty {
31 async fn read(&mut self, _buf: &mut [u8]) -> std::io::Result<usize> {
32 Ok(0)
34 }
35}
36
37pub fn empty() -> Empty {
39 Empty
40}
41
42#[cfg(test)]
43mod test {
44 use super::*;
45 use crate::api::io::{Read, Write};
46
47 #[tokio::test]
48 async fn test_empty() {
49 let mut empty = empty();
50 let buf = b"Hello, world!";
51 let n = empty.write(buf).await.unwrap();
52 assert_eq!(n, buf.len());
53 assert!(empty.flush().await.is_ok());
54
55 let mut read_buf = [0; 13];
56 let n = empty.read(&mut read_buf).await.unwrap();
57 assert_eq!(n, 0);
58 }
59}