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#[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}