1use thiserror::Error;
4
5pub type Result<T> = std::result::Result<T, Error>;
7
8#[derive(Debug, Error)]
10pub enum Error {
11 #[error("no data provided for chart")]
13 NoData,
14
15 #[error("invalid data format: {message}")]
17 InvalidData {
18 message: String,
20 },
21
22 #[error("missing column: {column}")]
24 MissingColumn {
25 column: String,
27 },
28
29 #[error("invalid configuration: {message}")]
31 InvalidConfig {
32 message: String,
34 },
35
36 #[error("rendering failed: {message}")]
38 RenderError {
39 message: String,
41 },
42
43 #[error("CSV error: {0}")]
45 Csv(#[from] csv::Error),
46
47 #[error("JSON error: {0}")]
49 Json(#[from] serde_json::Error),
50
51 #[error("I/O error: {0}")]
53 Io(#[from] std::io::Error),
54}
55
56#[cfg(test)]
57mod tests {
58 use super::*;
59
60 #[test]
61 fn error_display() {
62 let err = Error::MissingColumn {
63 column: "value".to_string(),
64 };
65 assert_eq!(err.to_string(), "missing column: value");
66 }
67
68 #[test]
69 fn error_no_data() {
70 let err = Error::NoData;
71 assert_eq!(err.to_string(), "no data provided for chart");
72 }
73}