Skip to main content

nova_plot/
error.rs

1//! Error types for nova-plot.
2
3use thiserror::Error;
4
5/// Result type alias for plot operations.
6pub type Result<T> = std::result::Result<T, Error>;
7
8/// Errors that can occur during plot operations.
9#[derive(Debug, Error)]
10pub enum Error {
11    /// No data provided.
12    #[error("no data provided for chart")]
13    NoData,
14
15    /// Invalid data format.
16    #[error("invalid data format: {message}")]
17    InvalidData {
18        /// Error message.
19        message: String,
20    },
21
22    /// Missing required column.
23    #[error("missing column: {column}")]
24    MissingColumn {
25        /// Column name.
26        column: String,
27    },
28
29    /// Invalid configuration.
30    #[error("invalid configuration: {message}")]
31    InvalidConfig {
32        /// Error message.
33        message: String,
34    },
35
36    /// Rendering error.
37    #[error("rendering failed: {message}")]
38    RenderError {
39        /// Error message.
40        message: String,
41    },
42
43    /// CSV parsing error.
44    #[error("CSV error: {0}")]
45    Csv(#[from] csv::Error),
46
47    /// JSON parsing error.
48    #[error("JSON error: {0}")]
49    Json(#[from] serde_json::Error),
50
51    /// I/O error.
52    #[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}