use core::fmt::{self, Display};
#[derive(Debug)]
pub enum MfError {
#[cfg(windows)]
NtStatus(u32),
#[cfg(unix)]
Errno(i32),
ProcessNotFound,
ModuleNotFound,
NoThreads,
InvalidString,
ProcessDied,
}
#[allow(dead_code)]
impl MfError {
#[cfg(all(windows, feature = "std"))]
pub(crate) fn last<T>() -> Result<T> {
use windows::Win32::Foundation::GetLastError;
Err(MfError::NtStatus(unsafe { GetLastError().0 }))
}
#[cfg(all(unix, feature = "std"))]
pub(crate) fn last<T>() -> Result<T> {
unsafe { Err(MfError::Errno(*libc::__errno_location())) }
}
}
impl Display for MfError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{self:?}")
}
}
#[cfg(feature = "std")]
impl std::error::Error for MfError {}
#[allow(missing_docs)]
pub type Result<T> = core::result::Result<T, MfError>;