use thiserror::Error;
#[derive(Debug, Error)]
pub enum AudioError {
#[error("device error: {0}")]
Device(String),
#[error("capture error: {0}")]
Capture(String),
#[error("playback error: {0}")]
Playback(String),
#[error("transcription error: {0}")]
Transcription(String),
#[error("synthesis error: {0}")]
Synthesis(String),
#[error("format error: {0}")]
Format(String),
#[error("api error: {0}")]
Api(String),
#[error("stream closed: {0}")]
StreamClosed(String),
#[error("unsupported: {0}")]
Unsupported(String),
#[error("io error: {source}")]
Io {
#[from]
source: std::io::Error,
},
}
pub type AudioResult<T> = Result<T, AudioError>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn display_device_error() {
let err = AudioError::Device("no mic found".into());
assert_eq!(err.to_string(), "device error: no mic found");
}
#[test]
fn display_capture_error() {
let err = AudioError::Capture("buffer overrun".into());
assert_eq!(err.to_string(), "capture error: buffer overrun");
}
#[test]
fn display_api_error() {
let err = AudioError::Api("401 unauthorized".into());
assert_eq!(err.to_string(), "api error: 401 unauthorized");
}
#[test]
fn display_format_error() {
let err = AudioError::Format("unsupported codec".into());
assert_eq!(err.to_string(), "format error: unsupported codec");
}
#[test]
fn display_stream_closed_error() {
let err = AudioError::StreamClosed("peer hung up".into());
assert_eq!(err.to_string(), "stream closed: peer hung up");
}
}