mirtal 0.1.0

Native, explicit-stream Rust API for Apple Metal
use crate::{Error, Result};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(u8)]
/// An element type supported by the safe mirtal API.
pub enum DType {
    /// Boolean values.
    Bool = 0,
    /// Unsigned 32-bit integers.
    Uint32 = 1,
    /// Signed 32-bit integers.
    Int32 = 2,
    /// IEEE 754 half-precision values.
    Float16 = 3,
    /// Brain floating-point values.
    Bfloat16 = 4,
    /// IEEE 754 single-precision values.
    Float32 = 5,
}

impl TryFrom<u8> for DType {
    type Error = Error;

    fn try_from(value: u8) -> Result<Self> {
        match value {
            0 => Ok(Self::Bool),
            1 => Ok(Self::Uint32),
            2 => Ok(Self::Int32),
            3 => Ok(Self::Float16),
            4 => Ok(Self::Bfloat16),
            5 => Ok(Self::Float32),
            _ => Err(Error::UnsupportedDtype(value)),
        }
    }
}