1 use ::io::MapNonBlock; 2 use std::io::{self, Read, Write}; 3 4 pub trait TryRead { try_read(&mut self, buf: &mut [u8]) -> io::Result<Option<usize>>5 fn try_read(&mut self, buf: &mut [u8]) -> io::Result<Option<usize>>; 6 } 7 8 pub trait TryWrite { try_write(&mut self, buf: &[u8]) -> io::Result<Option<usize>>9 fn try_write(&mut self, buf: &[u8]) -> io::Result<Option<usize>>; 10 } 11 12 impl<T: Read> TryRead for T { try_read(&mut self, dst: &mut [u8]) -> io::Result<Option<usize>>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 { try_write(&mut self, src: &[u8]) -> io::Result<Option<usize>>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 accept(&self) -> io::Result<Option<Self::Output>>27 fn accept(&self) -> io::Result<Option<Self::Output>>; 28 } 29