| use ::io::MapNonBlock; |
| use std::io::{self, Read, Write}; |
| |
| pub trait TryRead { |
| fn try_read(&mut self, buf: &mut [u8]) -> io::Result<Option<usize>>; |
| } |
| |
| pub trait TryWrite { |
| fn try_write(&mut self, buf: &[u8]) -> io::Result<Option<usize>>; |
| } |
| |
| impl<T: Read> TryRead for T { |
| fn try_read(&mut self, dst: &mut [u8]) -> io::Result<Option<usize>> { |
| self.read(dst).map_non_block() |
| } |
| } |
| |
| impl<T: Write> TryWrite for T { |
| fn try_write(&mut self, src: &[u8]) -> io::Result<Option<usize>> { |
| self.write(src).map_non_block() |
| } |
| } |
| |
| pub trait TryAccept { |
| type Output; |
| |
| fn accept(&self) -> io::Result<Option<Self::Output>>; |
| } |