Skip to main content

beamterm_core/
error.rs

1/// Error categories for the core rendering engine.
2#[derive(thiserror::Error, Debug)]
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 Error {
19    // Shader errors
20    pub(crate) fn shader_creation_failed(detail: &str) -> Self {
21        Self::Shader(format!("Shader creation failed: {detail}"))
22    }
23
24    pub(crate) fn shader_program_creation_failed(detail: impl std::fmt::Display) -> Self {
25        Self::Shader(format!("Shader program creation failed: {detail}"))
26    }
27
28    pub(crate) fn shader_compilation_failed(stage: impl std::fmt::Display, log: String) -> Self {
29        Self::Shader(format!("{stage} shader compilation failed: {log}"))
30    }
31
32    pub(crate) fn shader_link_failed(log: String) -> Self {
33        Self::Shader(format!("Shader linking failed: {log}"))
34    }
35
36    // Resource errors
37    pub(crate) fn buffer_creation_failed(
38        buffer_type: &str,
39        detail: impl std::fmt::Display,
40    ) -> Self {
41        Self::Resource(format!("Failed to create {buffer_type} buffer: {detail}"))
42    }
43
44    pub(crate) fn vertex_array_creation_failed(detail: impl std::fmt::Display) -> Self {
45        Self::Resource(format!("Failed to create vertex array object: {detail}"))
46    }
47
48    pub(crate) fn texture_creation_failed(detail: impl std::fmt::Display) -> Self {
49        Self::Resource(format!("Failed to create texture: {detail}"))
50    }
51
52    pub(crate) fn uniform_location_failed(name: &str) -> Self {
53        Self::Resource(format!("Failed to get uniform location: {name}"))
54    }
55}