use j2k_core::{BackendRequest, BufferError, CodecError};
use j2k_jpeg::JpegError;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error(transparent)]
Decode(#[from] JpegError),
#[error(transparent)]
Buffer(#[from] BufferError),
#[error("backend request {request:?} is not supported by j2k-jpeg-cuda")]
UnsupportedBackend {
request: BackendRequest,
},
#[error("unsupported CUDA request: {reason}")]
UnsupportedCudaRequest {
reason: &'static str,
},
#[error("CUDA is unavailable on this host")]
CudaUnavailable,
#[cfg(feature = "cuda-runtime")]
#[error("CUDA runtime error: {message}")]
CudaRuntime {
message: String,
},
}
impl CodecError for Error {
fn is_truncated(&self) -> bool {
matches!(self, Self::Decode(inner) if inner.is_truncated())
}
fn is_not_implemented(&self) -> bool {
matches!(self, Self::Decode(inner) if inner.is_not_implemented())
}
fn is_unsupported(&self) -> bool {
matches!(
self,
Self::UnsupportedBackend { .. }
| Self::UnsupportedCudaRequest { .. }
| Self::CudaUnavailable
) || matches!(self, Self::Decode(inner) if inner.is_unsupported())
}
fn is_buffer_error(&self) -> bool {
matches!(self, Self::Buffer(_))
|| matches!(self, Self::Decode(inner) if inner.is_buffer_error())
}
}