onedrop_renderer/
error.rs

1//! Error types for the onedrop-renderer crate.
2
3use std::fmt;
4
5/// Result type alias for onedrop-renderer operations.
6pub type Result<T> = std::result::Result<T, RenderError>;
7
8/// Errors that can occur during rendering.
9#[derive(Debug)]
10pub enum RenderError {
11    /// GPU device creation failed
12    DeviceCreationFailed(String),
13
14    /// Shader compilation failed
15    ShaderCompilationFailed { shader_name: String, reason: String },
16
17    /// Texture creation failed
18    TextureCreationFailed(String),
19
20    /// Buffer creation failed
21    BufferCreationFailed(String),
22
23    /// Rendering failed
24    RenderFailed(String),
25
26    /// Invalid configuration
27    InvalidConfiguration(String),
28
29    /// Generic error
30    Other(String),
31}
32
33impl fmt::Display for RenderError {
34    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
35        match self {
36            RenderError::DeviceCreationFailed(msg) => {
37                write!(f, "GPU device creation failed: {}", msg)
38            }
39            RenderError::ShaderCompilationFailed {
40                shader_name,
41                reason,
42            } => {
43                write!(f, "Shader '{}' compilation failed: {}", shader_name, reason)
44            }
45            RenderError::TextureCreationFailed(msg) => {
46                write!(f, "Texture creation failed: {}", msg)
47            }
48            RenderError::BufferCreationFailed(msg) => {
49                write!(f, "Buffer creation failed: {}", msg)
50            }
51            RenderError::RenderFailed(msg) => {
52                write!(f, "Rendering failed: {}", msg)
53            }
54            RenderError::InvalidConfiguration(msg) => {
55                write!(f, "Invalid configuration: {}", msg)
56            }
57            RenderError::Other(msg) => {
58                write!(f, "Error: {}", msg)
59            }
60        }
61    }
62}
63
64impl std::error::Error for RenderError {}
65
66impl From<wgpu::RequestDeviceError> for RenderError {
67    fn from(err: wgpu::RequestDeviceError) -> Self {
68        RenderError::DeviceCreationFailed(err.to_string())
69    }
70}
71
72impl From<wgpu::RequestAdapterError> for RenderError {
73    fn from(err: wgpu::RequestAdapterError) -> Self {
74        RenderError::DeviceCreationFailed(err.to_string())
75    }
76}