std_io_peek/
lib.rs

1#![forbid(unsafe_code)]
2
3use std::io;
4
5pub trait Peek {
6    fn peek_sync(&mut self, buf: &mut [u8]) -> io::Result<usize>;
7}
8
9mod tcp_stream {
10    use super::*;
11
12    use std::net::TcpStream;
13
14    impl Peek for TcpStream {
15        fn peek_sync(&mut self, buf: &mut [u8]) -> io::Result<usize> {
16            self.peek(buf)
17        }
18    }
19}
20
21mod cursor {
22    use super::*;
23
24    use std::io::Cursor;
25    use std::io::{BufRead, Read};
26
27    impl<T> Peek for Cursor<T>
28    where
29        T: AsRef<[u8]>,
30    {
31        fn peek_sync(&mut self, buf: &mut [u8]) -> io::Result<usize> {
32            let n = Read::read(&mut self.fill_buf()?, buf)?;
33            Ok(n)
34        }
35    }
36}