#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error(transparent)]
Io(#[from] std::io::Error),
#[error("invalid model: {0}")]
Model(String),
#[error("no GPU adapter: {0}")]
Adapter(#[from] wgpu::RequestAdapterError),
#[error("GPU device: {0}")]
Device(#[from] wgpu::RequestDeviceError),
#[error("GPU readback: {0}")]
Readback(#[from] wgpu::BufferAsyncError),
#[error("GPU readback: {0}")]
Map(#[from] wgpu::MapRangeError),
#[error("GPU poll: {0}")]
Poll(#[from] wgpu::PollError),
#[error("GPU: {0}")]
Gpu(String),
#[cfg(feature = "hub")]
#[cfg_attr(docsrs, doc(cfg(feature = "hub")))]
#[error("unknown model {name:?}{} Known models: {}", crate::hub::hint(*suggestion), crate::hub::names())]
UnknownModel {
name: String,
suggestion: Option<&'static str>,
},
#[cfg(feature = "hub")]
#[cfg_attr(docsrs, doc(cfg(feature = "hub")))]
#[error("{url}: {message}")]
Http {
url: String,
status: Option<u16>,
message: String,
},
#[cfg(feature = "hub")]
#[cfg_attr(docsrs, doc(cfg(feature = "hub")))]
#[error("{0}")]
Hub(String),
#[cfg(feature = "hub")]
#[cfg_attr(docsrs, doc(cfg(feature = "hub")))]
#[error("download cancelled")]
Cancelled,
}
pub type Result<T> = std::result::Result<T, Error>;
macro_rules! bail {
($($arg:tt)*) => {
return Err($crate::error::Error::Model(format!($($arg)*)))
};
}
pub(crate) use bail;