use std::io;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum FftError {
#[error("Input validation error: {0}")]
ValidationError(String),
#[error("WGPU error: {0}")]
WgpuError(String),
#[error("I/O error: {0}")]
IoError(#[from] io::Error),
#[error("No GPU device available")]
NoDevice,
#[error("Invalid FFT size: {0}")]
InvalidSize(String),
#[error("Compute shader error: {0}")]
ShaderError(String),
#[error("Batch processing error: {0}")]
BatchError(String),
#[error("GPU backend error: {0}")]
BackendError(String),
#[error("{0}")]
Other(String),
}
pub type Result<T> = std::result::Result<T, FftError>;
impl From<wgpu::Error> for FftError {
fn from(e: wgpu::Error) -> Self {
Self::WgpuError(e.to_string())
}
}
impl From<wgpu::PollError> for FftError {
fn from(e: wgpu::PollError) -> Self {
Self::WgpuError(e.to_string())
}
}
impl From<wgpu::RequestAdapterError> for FftError {
fn from(e: wgpu::RequestAdapterError) -> Self {
Self::WgpuError(e.to_string())
}
}
impl From<wgpu::RequestDeviceError> for FftError {
fn from(e: wgpu::RequestDeviceError) -> Self {
Self::WgpuError(e.to_string())
}
}