child_wait_timeout 0.1.0

A wait timeout in rust
Documentation
use std::io;
use std::os::windows::io::AsRawHandle;
use std::process::Child;

use winapi::shared::winerror::WAIT_TIMEOUT;
use winapi::um::synchapi::WaitForSingleObject;
use winapi::um::winbase::WAIT_OBJECT_0;

use crate::error::{_generate_default_error, _generate_timeout_error};

pub(crate) fn _wait_timeout_untraced_ms(child: &mut Child, timeout_ms: u32) -> io::Result<()> {
    let handle = child.as_raw_handle();

    let winapi_handle: *mut winapi::ctypes::c_void = handle as *mut winapi::ctypes::c_void;

    let result = unsafe { WaitForSingleObject(winapi_handle, timeout_ms) };

    if result == WAIT_TIMEOUT {
        _generate_timeout_error()
    } else if result == WAIT_OBJECT_0 {
        Ok(())
    } else {
        _generate_default_error()
    }
}