1use thiserror::Error;
4
5#[derive(Debug, Error)]
12pub enum AgxError {
13 #[error("Decode error: {0}")]
15 Decode(String),
16 #[error("Encode error: {0}")]
18 Encode(String),
19 #[error("Preset error: {0}")]
21 Preset(String),
22 #[error("LUT error: {0}")]
24 Lut(String),
25 #[error("Image error: {0}")]
27 Image(#[from] image::ImageError),
28 #[error("IO error: {0}")]
30 Io(#[from] std::io::Error),
31 #[error("GPU error: {0}")]
33 Gpu(String),
34}
35
36pub type Result<T> = std::result::Result<T, AgxError>;
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42
43 #[test]
44 fn error_display_decode() {
45 let err = AgxError::Decode("bad file".into());
46 assert_eq!(err.to_string(), "Decode error: bad file");
47 }
48
49 #[test]
50 fn error_display_encode() {
51 let err = AgxError::Encode("write failed".into());
52 assert_eq!(err.to_string(), "Encode error: write failed");
53 }
54
55 #[test]
56 fn error_display_preset() {
57 let err = AgxError::Preset("parse failed".into());
58 assert_eq!(err.to_string(), "Preset error: parse failed");
59 }
60
61 #[test]
62 fn error_display_lut() {
63 let err = AgxError::Lut("invalid size".into());
64 assert_eq!(err.to_string(), "LUT error: invalid size");
65 }
66
67 #[test]
68 fn error_display_gpu() {
69 let err = AgxError::Gpu("no adapter found".into());
70 assert_eq!(err.to_string(), "GPU error: no adapter found");
71 }
72
73 #[test]
74 fn error_from_io() {
75 let io_err = std::io::Error::new(std::io::ErrorKind::NotFound, "missing");
76 let err: AgxError = io_err.into();
77 assert!(matches!(err, AgxError::Io(_)));
78 }
79}