Skip to main content

beamterm_core/
error.rs

1/// Error categories for the core rendering engine.
2#[derive(thiserror::Error, Debug, Clone)]
3#[non_exhaustive]
4pub enum Error {
5    /// Shader compilation, linking, or program creation errors.
6    #[error("Shader error: {0}")]
7    Shader(String),
8
9    /// GL resource creation or management errors.
10    #[error("Resource error: {0}")]
11    Resource(String),
12
13    /// External data loading or parsing errors.
14    #[error("Data error: {0}")]
15    Data(String),
16}
17
18impl From<beamterm_data::SerializationError> for Error {
19    fn from(err: beamterm_data::SerializationError) -> Self {
20        Error::Data(err.message.into())
21    }
22}
23
24#[cfg(feature = "native-dynamic-atlas")]
25impl From<beamterm_rasterizer::Error> for Error {
26    fn from(err: beamterm_rasterizer::Error) -> Self {
27        Error::Resource(err.to_string())
28    }
29}
30
31impl Error {
32    // Shader errors
33    pub(crate) fn shader_creation_failed(detail: &str) -> Self {
34        Self::Shader(format!("Shader creation failed: {detail}"))
35    }
36
37    pub(crate) fn shader_program_creation_failed(detail: impl std::fmt::Display) -> Self {
38        Self::Shader(format!("Shader program creation failed: {detail}"))
39    }
40
41    pub(crate) fn shader_compilation_failed(stage: impl std::fmt::Display, log: &str) -> Self {
42        Self::Shader(format!("{stage} shader compilation failed: {log}"))
43    }
44
45    pub(crate) fn shader_link_failed(log: &str) -> Self {
46        Self::Shader(format!("Shader linking failed: {log}"))
47    }
48
49    // Resource errors
50    pub(crate) fn buffer_creation_failed(
51        buffer_type: &str,
52        detail: impl std::fmt::Display,
53    ) -> Self {
54        Self::Resource(format!("Failed to create {buffer_type} buffer: {detail}"))
55    }
56
57    pub(crate) fn vertex_array_creation_failed(detail: impl std::fmt::Display) -> Self {
58        Self::Resource(format!("Failed to create vertex array object: {detail}"))
59    }
60
61    pub(crate) fn texture_creation_failed(detail: impl std::fmt::Display) -> Self {
62        Self::Resource(format!("Failed to create texture: {detail}"))
63    }
64
65    pub(crate) fn uniform_location_failed(name: &str) -> Self {
66        Self::Resource(format!("Failed to get uniform location: {name}"))
67    }
68}