io/mio_util/
io.rs

1// Re-export the io::Result / Error types for convenience
2pub use std::io::{Error, ErrorKind, Read, Result, Write};
3
4/// A helper trait to provide the map_non_block function on Results.
5pub trait MapNonBlock<T> {
6    /// Maps a `Result<T>` to a `Result<Option<T>>` by converting
7    /// operation-would-block errors into `Ok(None)`.
8    fn map_non_block(self) -> Result<Option<T>>;
9}
10
11impl<T> MapNonBlock<T> for Result<T> {
12    fn map_non_block(self) -> Result<Option<T>> {
13        match self {
14            Ok(value) => Ok(Some(value)),
15            Err(err) => {
16                if let ErrorKind::WouldBlock = err.kind() {
17                    Ok(None)
18                } else {
19                    Err(err)
20                }
21            }
22        }
23    }
24}
25
26/// Returns a std `WouldBlock` error without allocating
27pub fn would_block() -> Error { ErrorKind::WouldBlock.into() }