1use std::io;
4
5#[derive(Debug, thiserror::Error)]
7pub enum SaorsaTuiError {
8 #[error("I/O error: {0}")]
10 Io(#[from] io::Error),
11
12 #[error("terminal error: {0}")]
14 Terminal(String),
15
16 #[error("layout error: {0}")]
18 Layout(String),
19
20 #[error("style error: {0}")]
22 Style(String),
23
24 #[error("render error: {0}")]
26 Render(String),
27
28 #[error("widget error: {0}")]
30 Widget(String),
31
32 #[error("unicode error: {0}")]
34 Unicode(String),
35
36 #[error("reactive error: {0}")]
38 Reactive(String),
39
40 #[error("internal error: {0}")]
42 Internal(String),
43}
44
45pub type Result<T> = std::result::Result<T, SaorsaTuiError>;
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn error_display() {
54 let err = SaorsaTuiError::Terminal("no tty".into());
55 assert_eq!(err.to_string(), "terminal error: no tty");
56 }
57
58 #[test]
59 fn io_error_converts() {
60 let io_err = io::Error::new(io::ErrorKind::NotFound, "missing");
61 let err: SaorsaTuiError = io_err.into();
62 assert!(matches!(err, SaorsaTuiError::Io(_)));
63 }
64}