avenger_wgpu/
error.rs

1use lyon::tessellation::TessellationError;
2use thiserror::Error;
3
4#[cfg(feature = "pyo3")]
5use pyo3::{exceptions::PyValueError, PyErr};
6
7#[cfg(target_arch = "wasm32")]
8use web_sys::{js_sys::Object, wasm_bindgen::JsValue};
9
10#[derive(Error, Debug)]
11pub enum AvengerWgpuError {
12    #[error("Avenger error")]
13    AvengerError(#[from] avenger::error::AvengerError),
14
15    #[error("Device request failed")]
16    RequestDeviceError(#[from] wgpu::RequestDeviceError),
17
18    #[error("Failed to create surface")]
19    CreateSurfaceError(#[from] wgpu::CreateSurfaceError),
20
21    #[error("Failed to create surface")]
22    SurfaceError(#[from] wgpu::SurfaceError),
23
24    #[error("WGPU adapter creation failed")]
25    MakeWgpuAdapterError,
26
27    #[error("lyon tessellation error")]
28    TessellationError(#[from] TessellationError),
29
30    #[error("Image allocation error: {0}")]
31    ImageAllocationError(String),
32
33    #[error("Conversion error: {0}")]
34    ConversionError(String),
35
36    #[error("Text support is not enabled: {0}")]
37    TextNotEnabled(String),
38
39    #[error("Text error: {0}")]
40    TextError(String),
41
42    #[cfg(target_arch = "wasm32")]
43    #[error("JavaScript error")]
44    JsError(JsValue),
45
46    #[cfg(target_arch = "wasm32")]
47    #[error("JavaScript error")]
48    JsObjectError(Object),
49}
50
51// Conversion to PyO3 error
52#[cfg(feature = "pyo3")]
53impl From<AvengerWgpuError> for PyErr {
54    fn from(err: AvengerWgpuError) -> PyErr {
55        PyValueError::new_err(err.to_string())
56    }
57}
58
59#[cfg(target_arch = "wasm32")]
60impl From<JsValue> for AvengerWgpuError {
61    fn from(value: JsValue) -> Self {
62        AvengerWgpuError::JsError(value)
63    }
64}
65
66#[cfg(target_arch = "wasm32")]
67impl From<Object> for AvengerWgpuError {
68    fn from(value: Object) -> Self {
69        AvengerWgpuError::JsObjectError(value)
70    }
71}