knok 0.1.0

Compile-time linalg graphs for Rust
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Backend {
    LlvmCpu,
    MetalSpirv,
}

impl Backend {
    pub const fn name(self) -> &'static str {
        match self {
            Self::LlvmCpu => "llvm-cpu",
            Self::MetalSpirv => "metal-spirv",
        }
    }

    pub const fn default_driver(self) -> &'static str {
        match self {
            Self::LlvmCpu => "local-task",
            Self::MetalSpirv => "metal",
        }
    }

    pub fn from_name(name: &str) -> Option<Self> {
        match name {
            "llvm-cpu" => Some(Self::LlvmCpu),
            "metal-spirv" => Some(Self::MetalSpirv),
            _ => None,
        }
    }

    pub fn supports_driver(self, driver: &str) -> bool {
        self.default_driver() == driver
    }
}

pub const SUPPORTED_BACKENDS: &[Backend] = &[Backend::LlvmCpu, Backend::MetalSpirv];