1#[derive(thiserror::Error, Debug, Clone)]
3#[non_exhaustive]
4pub enum Error {
5 #[error("Shader error: {0}")]
7 Shader(String),
8
9 #[error("Resource error: {0}")]
11 Resource(String),
12
13 #[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 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 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}