use std::{error::Error, fmt};
#[ derive(Clone, Debug)]
pub struct ShaderError<E> {
/// The source code of the shader.
pub source: String,
pub label: Option<String>,
pub inner: Box <E>,
}
#[ cfg(feature = "wgsl-in" )]
impl fmt::Display for ShaderError<crate ::front::wgsl::ParseError> {
fn fmt(&self , f: &mut fmt::Formatter<'_>) -> fmt::Result {
let label = self .label.as_deref().unwrap_or_default();
let string = self .inner.emit_to_string(&self .source);
write!(f, "\nShader '{label}' parsing {string}" )
}
}
#[ cfg(feature = "glsl-in" )]
impl fmt::Display for ShaderError<crate ::front::glsl::ParseErrors> {
fn fmt(&self , f: &mut fmt::Formatter<'_>) -> fmt::Result {
let label = self .label.as_deref().unwrap_or_default();
let string = self .inner.emit_to_string(&self .source);
write!(f, "\nShader '{label}' parsing {string}" )
}
}
#[ cfg(feature = "spv-in" )]
impl fmt::Display for ShaderError<crate ::front::spv::Error> {
fn fmt(&self , f: &mut fmt::Formatter<'_>) -> fmt::Result {
let label = self .label.as_deref().unwrap_or_default();
let string = self .inner.emit_to_string(&self .source);
write!(f, "\nShader '{label}' parsing {string}" )
}
}
impl fmt::Display for ShaderError<crate ::WithSpan<crate ::valid::ValidationError>> {
fn fmt(&self , f: &mut fmt::Formatter<'_>) -> fmt::Result {
use codespan_reporting::{files::SimpleFile, term};
let label = self .label.as_deref().unwrap_or_default();
let files = SimpleFile::new(label, &self .source);
let config = term::Config::default();
let mut writer = termcolor::NoColor::new(Vec::new());
term::emit(&mut writer, &config, &files, &self .inner.diagnostic())
.expect("cannot write error" );
write!(
f,
"\nShader validation {}" ,
String::from_utf8_lossy(&writer.into_inner())
)
}
}
impl <E> Error for ShaderError<E>
where
ShaderError<E>: fmt::Display,
E: Error + 'static,
{
fn source(&self ) -> Option<&(dyn Error + 'static)> {
Some(&self .inner)
}
}
Messung V0.5 in Prozent C=88 H=99 G=93
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-18)
¤
*© Formatika GbR, Deutschland