use crate::compile;
use crate::compile::{CompilableTarget, NoOptions};
use crate::sealed::Sealed;
use spirv_cross_sys::CompilerBackend;
pub struct None;
#[cfg(feature = "glsl")]
#[cfg_attr(docsrs, doc(cfg(feature = "glsl")))]
pub struct Glsl;
#[cfg(feature = "msl")]
#[cfg_attr(docsrs, doc(cfg(feature = "msl")))]
pub struct Msl;
#[cfg(feature = "hlsl")]
#[cfg_attr(docsrs, doc(cfg(feature = "hlsl")))]
pub struct Hlsl;
#[deprecated = "This backend is deprecated in SPIRV-Cross."]
#[cfg(feature = "cpp")]
#[cfg_attr(docsrs, doc(cfg(feature = "cpp")))]
pub struct Cpp;
#[cfg(feature = "json")]
#[cfg_attr(docsrs, doc(cfg(feature = "json")))]
pub struct Json;
impl Sealed for None {}
impl Target for None {
const BACKEND: CompilerBackend = CompilerBackend::None;
}
#[cfg(feature = "glsl")]
#[cfg_attr(docsrs, doc(cfg(feature = "glsl")))]
mod glsl {
use super::*;
impl CompilableTarget for Glsl {
type Options = compile::glsl::CompilerOptions;
}
impl Sealed for Glsl {}
impl Target for Glsl {
const BACKEND: CompilerBackend = CompilerBackend::Glsl;
}
}
#[cfg(feature = "hlsl")]
#[cfg_attr(docsrs, doc(cfg(feature = "hlsl")))]
mod hlsl {
use super::*;
impl CompilableTarget for Hlsl {
type Options = compile::hlsl::CompilerOptions;
}
impl Sealed for Hlsl {}
impl Target for Hlsl {
const BACKEND: CompilerBackend = CompilerBackend::Hlsl;
}
}
#[cfg(feature = "msl")]
#[cfg_attr(docsrs, doc(cfg(feature = "msl")))]
mod msl {
use super::*;
impl CompilableTarget for Msl {
type Options = compile::msl::CompilerOptions;
}
impl Sealed for Msl {}
impl Target for Msl {
const BACKEND: CompilerBackend = CompilerBackend::Msl;
}
}
#[cfg(feature = "json")]
#[cfg_attr(docsrs, doc(cfg(feature = "json")))]
mod json {
use super::*;
impl CompilableTarget for Json {
type Options = NoOptions;
}
impl Sealed for Json {}
impl Target for Json {
const BACKEND: CompilerBackend = CompilerBackend::Json;
}
}
#[cfg(feature = "cpp")]
#[cfg_attr(docsrs, doc(cfg(feature = "cpp")))]
mod cpp {
use super::*;
#[allow(deprecated)]
impl CompilableTarget for Cpp {
type Options = NoOptions;
}
#[allow(deprecated)]
impl Sealed for Cpp {}
#[allow(deprecated)]
impl Target for Cpp {
const BACKEND: CompilerBackend = CompilerBackend::Cpp;
}
}
pub trait Target: Sealed {
#[doc(hidden)]
const BACKEND: CompilerBackend;
}