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}