#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Platform {
Metal,
Hlsl,
Glsl,
}
impl Platform {
pub fn current() -> Self {
#[cfg(backend_metal)]
{
Platform::Metal
}
#[cfg(backend_dx)]
{
Platform::Hlsl
}
#[cfg(backend_vk)]
{
Platform::Glsl
}
}
pub fn key(self) -> &'static str {
match self {
Platform::Metal => "metal",
Platform::Hlsl => "hlsl",
Platform::Glsl => "glsl",
}
}
pub fn accepts_ext(self, ext: &str) -> bool {
!matches!(ext, "metal" | "hlsl" | "glsl") || ext == self.key()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn platform_key_and_accepts_ext_cover_all_variants() {
assert_eq!(Platform::Metal.key(), "metal");
assert_eq!(Platform::Hlsl.key(), "hlsl");
assert_eq!(Platform::Glsl.key(), "glsl");
assert!(Platform::Metal.accepts_ext("metal"));
assert!(!Platform::Metal.accepts_ext("hlsl"));
assert!(!Platform::Metal.accepts_ext("glsl"));
assert!(Platform::Hlsl.accepts_ext("hlsl"));
assert!(!Platform::Hlsl.accepts_ext("metal"));
assert!(Platform::Glsl.accepts_ext("glsl"));
assert!(!Platform::Glsl.accepts_ext("hlsl"));
assert!(Platform::Metal.accepts_ext("txt"));
}
}