//! A zero overhead Windows I/O library #![cfg(windows)] #![deny(missing_docs)] #![allow(bad_style)] #![doc(html_root_url = "https://docs.rs/miow/0.3/x86_64-pc-windows-msvc/")] use std::cmp; use std::io; use std::time::Duration; use winapi::shared::minwindef::*; use winapi::um::winbase::*; #[cfg(test)] macro_rules! t { ($e:expr) => { match $e { Ok(e) => e, Err(e) => panic!("{} failed with {:?}", stringify!($e), e), } }; } mod handle; mod overlapped; pub mod iocp; pub mod net; pub mod pipe; pub use crate::overlapped::Overlapped; fn cvt(i: BOOL) -> io::Result { if i == 0 { Err(io::Error::last_os_error()) } else { Ok(i) } } fn dur2ms(dur: Option) -> u32 { let dur = match dur { Some(dur) => dur, None => return INFINITE, }; let ms = dur.as_secs().checked_mul(1_000); let ms_extra = dur.subsec_nanos() / 1_000_000; ms.and_then(|ms| ms.checked_add(ms_extra as u64)) .map(|ms| cmp::min(u32::max_value() as u64, ms) as u32) .unwrap_or(INFINITE - 1) }