auto_enums/derive/std/
io.rs

1// SPDX-License-Identifier: Apache-2.0 OR MIT
2
3pub(crate) mod read {
4    use crate::derive::prelude::*;
5
6    pub(crate) const NAME: &[&str] = &["Read", "io::Read"];
7
8    pub(crate) fn derive(_cx: &Context, data: &Data) -> Result<TokenStream> {
9        // TODO: Add is_read_vectored once stabilized https://github.com/rust-lang/rust/issues/69941
10        // TODO: Add read_buf,read_buf_exact once stabilized https://github.com/rust-lang/rust/issues/78485
11        Ok(derive_trait(data, &parse_quote!(::std::io::Read), None, parse_quote! {
12            trait Read {
13                #[inline]
14                fn read(&mut self, buf: &mut [u8]) -> ::std::io::Result<usize>;
15                #[inline]
16                fn read_vectored(
17                    &mut self,
18                    bufs: &mut [::std::io::IoSliceMut<'_>],
19                ) -> ::std::io::Result<usize>;
20                #[inline]
21                fn read_to_end(
22                    &mut self,
23                    buf: &mut ::std::vec::Vec<u8>,
24                ) -> ::std::io::Result<usize>;
25                #[inline]
26                fn read_to_string(
27                    &mut self,
28                    buf: &mut ::std::string::String,
29                ) -> ::std::io::Result<usize>;
30                #[inline]
31                fn read_exact(&mut self, buf: &mut [u8]) -> ::std::io::Result<()>;
32            }
33        }))
34    }
35}
36
37pub(crate) mod write {
38    use crate::derive::prelude::*;
39
40    pub(crate) const NAME: &[&str] = &["Write", "io::Write"];
41
42    pub(crate) fn derive(_cx: &Context, data: &Data) -> Result<TokenStream> {
43        // TODO: Add is_write_vectored once stabilized https://github.com/rust-lang/rust/issues/69941
44        // TODO: Add write_all_vectored once stabilized https://github.com/rust-lang/rust/issues/70436
45        Ok(derive_trait(data, &parse_quote!(::std::io::Write), None, parse_quote! {
46            trait Write {
47                #[inline]
48                fn write(&mut self, buf: &[u8]) -> ::std::io::Result<usize>;
49                #[inline]
50                fn write_vectored(
51                    &mut self,
52                    bufs: &[::std::io::IoSlice<'_>],
53                ) -> ::std::io::Result<usize>;
54                #[inline]
55                fn flush(&mut self) -> ::std::io::Result<()>;
56                #[inline]
57                fn write_all(&mut self, buf: &[u8]) -> ::std::io::Result<()>;
58                #[inline]
59                fn write_fmt(
60                    &mut self,
61                    fmt: ::std::fmt::Arguments<'_>,
62                ) -> ::std::io::Result<()>;
63            }
64        }))
65    }
66}
67
68pub(crate) mod seek {
69    use crate::derive::prelude::*;
70
71    pub(crate) const NAME: &[&str] = &["Seek", "io::Seek"];
72
73    pub(crate) fn derive(_cx: &Context, data: &Data) -> Result<TokenStream> {
74        Ok(derive_trait(data, &parse_quote!(::std::io::Seek), None, parse_quote! {
75            trait Seek {
76                #[inline]
77                fn seek(&mut self, pos: ::std::io::SeekFrom) -> ::std::io::Result<u64>;
78            }
79        }))
80    }
81}
82
83pub(crate) mod buf_read {
84    use crate::derive::prelude::*;
85
86    pub(crate) const NAME: &[&str] = &["BufRead", "io::BufRead"];
87
88    pub(crate) fn derive(_cx: &Context, data: &Data) -> Result<TokenStream> {
89        Ok(derive_trait(data, &parse_quote!(::std::io::BufRead), None, parse_quote! {
90            trait BufRead {
91                #[inline]
92                fn fill_buf(&mut self) -> ::std::io::Result<&[u8]>;
93                #[inline]
94                fn consume(&mut self, amt: usize);
95                #[inline]
96                fn read_until(
97                    &mut self,
98                    byte: u8, buf: &mut ::std::vec::Vec<u8>,
99                ) -> ::std::io::Result<usize>;
100                #[inline]
101                fn read_line(
102                    &mut self,
103                    buf: &mut ::std::string::String,
104                ) -> ::std::io::Result<usize>;
105            }
106        }))
107    }
108}