perfmon 0.2.2

A toolkit designed to be a foundation for applications to monitor their performance.
Documentation
use core::mem::MaybeUninit;

use std::io::{Error, Result};

use windows_sys::Win32::{
    Foundation::FILETIME,
    System::Threading::GetSystemTimes,
};

pub struct SystemTimes {
    pub idle: FILETIME,
    pub kernel: FILETIME,
    pub user: FILETIME,
}

impl SystemTimes {
    pub fn capture() -> Result<Self> {
        let mut idle =
            MaybeUninit::<FILETIME>::uninit();

        let mut kernel =
            MaybeUninit::<FILETIME>::uninit();

        let mut user =
            MaybeUninit::<FILETIME>::uninit();

        let ret =
            unsafe {
                GetSystemTimes(
                    idle.as_mut_ptr(),
                    kernel.as_mut_ptr(),
                    user.as_mut_ptr()
                )
            };

        if ret == 0 {
            return Err(Error::last_os_error());
        }

        Ok(unsafe {
            Self {
                idle: idle.assume_init(),
                kernel: kernel.assume_init(),
                user: user.assume_init(),
            }
        })
    }
}