wslplugins-rs 0.1.0-beta.2

A Rust framework for developing WSL plugins using safe and idiomatic Rust.
Documentation
use thiserror::Error;
use windows_core::HRESULT;

#[derive(Debug, Error)]
pub enum ParseError {
    #[error("Windows error: HRESULT={0}")]
    Windows(HRESULT),

    #[cfg(feature = "uuid")]
    #[error("UUID parsing error: {0}")]
    UUID(#[from] uuid::Error),
}

impl From<windows_core::Error> for ParseError {
    #[inline]
    fn from(value: windows_core::Error) -> Self {
        Self::Windows(value.code())
    }
}
#[cfg(feature = "uuid")]
#[expect(
    clippy::unreadable_literal,
    reason = "It's the natural Microsoft error format"
)]
pub const E_INVALIDARG: windows_core::HRESULT = HRESULT(0x80070057_u32.cast_signed());
impl From<ParseError> for windows_core::HRESULT {
    #[inline]
    fn from(value: ParseError) -> Self {
        match value {
            ParseError::Windows(hresult) => hresult,
            #[cfg(feature = "uuid")]
            ParseError::UUID(_) => E_INVALIDARG,
        }
    }
}

impl From<ParseError> for windows_core::Error {
    #[inline]
    fn from(value: ParseError) -> Self {
        Self::from_hresult(value.into())
    }
}