use thiserror::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error)]
pub enum Error {
#[error("ReSpeaker device not found (expected VID {vid:04x}, PIDs {pids})")]
NotFound { vid: u16, pids: String },
#[error(
"permission denied opening ReSpeaker USB device; try sudo or a udev rule for 2886:0018 / 2886:0019 / 2886:001a"
)]
Access,
#[error("operation not supported on this ReSpeaker model ({0})")]
Unsupported(&'static str),
#[error("unknown parameter `{0}`")]
UnknownParameter(String),
#[error("parameter `{0}` is read-only")]
ReadOnly(String),
#[error("parameter `{0}` is write-only")]
WriteOnly(String),
#[error("invalid parameter value: {0}")]
InvalidValue(String),
#[error("USB control status {code} ({name})")]
ControlStatus { code: u8, name: &'static str },
#[error("USB error: {0}")]
Usb(#[from] rusb::Error),
#[error("{0}")]
Message(String),
}