1 use ::io::MapNonBlock;
2 use std::io::{self, Read, Write};
3 
4 pub trait TryRead {
5     fn try_read(&mut self, buf: &mut [u8]) -> io::Result<Option<usize>>;
6 }
7 
8 pub trait TryWrite {
9     fn try_write(&mut self, buf: &[u8]) -> io::Result<Option<usize>>;
10 }
11 
12 impl<T: Read> TryRead for T {
13     fn try_read(&mut self, dst: &mut [u8]) -> io::Result<Option<usize>> {
14         self.read(dst).map_non_block()
15     }
16 }
17 
18 impl<T: Write> TryWrite for T {
19     fn try_write(&mut self, src: &[u8]) -> io::Result<Option<usize>> {
20         self.write(src).map_non_block()
21     }
22 }
23 
24 pub trait TryAccept {
25     type Output;
26 
27     fn accept(&self) -> io::Result<Option<Self::Output>>;
28 }
29