mesa3d_util 0.1.71

Utility crate part of Mesa3D project (src/util/rust)
Documentation
// Copyright 2025 Google
// SPDX-License-Identifier: MIT

use std::ffi::NulError;
use std::io::Error as IoError;
use std::num::TryFromIntError;
use std::str::Utf8Error;

use remain::sorted;
#[cfg(any(target_os = "android", target_os = "linux"))]
use rustix::io::Errno as RustixError;
use thiserror::Error;

/// An error generated while using this crate.
#[sorted]
#[derive(Error, Debug)]
pub enum MesaError {
    /// An error with the MesaHandle
    #[error("invalid Mesa handle")]
    InvalidMesaHandle,
    /// An input/output error occured.
    #[error("an input/output error occur: {0}")]
    IoError(IoError),
    /// Nul crate error.
    #[error("Nul Error occured {0}")]
    NulError(NulError),
    /// Rustix crate error.
    #[cfg(any(target_os = "android", target_os = "linux"))]
    #[error("The errno is {0}")]
    RustixError(RustixError),
    /// An attempted integer conversion failed.
    #[error("int conversion failed: {0}")]
    TryFromIntError(TryFromIntError),
    /// The command is unsupported.
    #[error("the requested function is not implemented")]
    Unsupported,
    /// Utf8 error.
    #[error("an utf8 error occured: {0}")]
    Utf8Error(Utf8Error),
    /// An error with a free form context, similar to anyhow
    #[error("operation failed: {0}")]
    WithContext(&'static str),
}

#[cfg(any(target_os = "android", target_os = "linux"))]
impl From<RustixError> for MesaError {
    fn from(e: RustixError) -> MesaError {
        MesaError::RustixError(e)
    }
}

impl From<NulError> for MesaError {
    fn from(e: NulError) -> MesaError {
        MesaError::NulError(e)
    }
}

impl From<IoError> for MesaError {
    fn from(e: IoError) -> MesaError {
        MesaError::IoError(e)
    }
}

impl From<TryFromIntError> for MesaError {
    fn from(e: TryFromIntError) -> MesaError {
        MesaError::TryFromIntError(e)
    }
}

impl From<Utf8Error> for MesaError {
    fn from(e: Utf8Error) -> MesaError {
        MesaError::Utf8Error(e)
    }
}

/// The result of an operation in this crate.
pub type MesaResult<T> = std::result::Result<T, MesaError>;