1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
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>>; }