1use std::io;
4
5use thiserror::Error;
6
7#[derive(Debug, Error)]
9pub enum FftError {
10 #[error("Input validation error: {0}")]
12 ValidationError(String),
13
14 #[error("WGPU error: {0}")]
16 WgpuError(String),
17
18 #[error("I/O error: {0}")]
20 IoError(#[from] io::Error),
21
22 #[error("No GPU device available")]
24 NoDevice,
25
26 #[error("Invalid FFT size: {0}")]
28 InvalidSize(String),
29
30 #[error("Compute shader error: {0}")]
32 ShaderError(String),
33
34 #[error("Batch processing error: {0}")]
36 BatchError(String),
37
38 #[error("GPU backend error: {0}")]
40 BackendError(String),
41
42 #[error("{0}")]
44 Other(String),
45}
46
47pub type Result<T> = std::result::Result<T, FftError>;
49
50impl From<wgpu::Error> for FftError {
52 fn from(e: wgpu::Error) -> Self {
53 Self::WgpuError(e.to_string())
54 }
55}
56
57impl From<wgpu::PollError> for FftError {
59 fn from(e: wgpu::PollError) -> Self {
60 Self::WgpuError(e.to_string())
61 }
62}
63
64impl From<wgpu::RequestAdapterError> for FftError {
66 fn from(e: wgpu::RequestAdapterError) -> Self {
67 Self::WgpuError(e.to_string())
68 }
69}
70
71impl From<wgpu::RequestDeviceError> for FftError {
73 fn from(e: wgpu::RequestDeviceError) -> Self {
74 Self::WgpuError(e.to_string())
75 }
76}