brainwires_audio/
error.rs1use thiserror::Error;
2
3#[derive(Debug, Error)]
5pub enum AudioError {
6 #[error("device error: {0}")]
8 Device(String),
9
10 #[error("capture error: {0}")]
12 Capture(String),
13
14 #[error("playback error: {0}")]
16 Playback(String),
17
18 #[error("transcription error: {0}")]
20 Transcription(String),
21
22 #[error("synthesis error: {0}")]
24 Synthesis(String),
25
26 #[error("format error: {0}")]
28 Format(String),
29
30 #[error("api error: {0}")]
32 Api(String),
33
34 #[error("stream closed: {0}")]
36 StreamClosed(String),
37
38 #[error("unsupported: {0}")]
40 Unsupported(String),
41
42 #[error("io error: {source}")]
44 Io {
45 #[from]
47 source: std::io::Error,
48 },
49}
50
51pub type AudioResult<T> = Result<T, AudioError>;
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57
58 #[test]
59 fn display_device_error() {
60 let err = AudioError::Device("no mic found".into());
61 assert_eq!(err.to_string(), "device error: no mic found");
62 }
63
64 #[test]
65 fn display_capture_error() {
66 let err = AudioError::Capture("buffer overrun".into());
67 assert_eq!(err.to_string(), "capture error: buffer overrun");
68 }
69
70 #[test]
71 fn display_api_error() {
72 let err = AudioError::Api("401 unauthorized".into());
73 assert_eq!(err.to_string(), "api error: 401 unauthorized");
74 }
75
76 #[test]
77 fn display_format_error() {
78 let err = AudioError::Format("unsupported codec".into());
79 assert_eq!(err.to_string(), "format error: unsupported codec");
80 }
81
82 #[test]
83 fn display_stream_closed_error() {
84 let err = AudioError::StreamClosed("peer hung up".into());
85 assert_eq!(err.to_string(), "stream closed: peer hung up");
86 }
87}