Skip to main content

mprobe_vis/
error.rs

1//! Defines the `Error` and `Result` types that this crate uses.
2
3use std::error::Error;
4use std::fmt::Display;
5use std::io::Error as IoError;
6
7use tinytemplate::error::Error as TinyTemplateError;
8
9/// The result type that uses [VisError] as the error type.
10pub type Result<T> = std::result::Result<T, VisError>;
11
12/// The error type for generating a visualization report
13/// of diagnostic metrics.
14#[derive(Debug)]
15pub enum VisError {
16    /// A [std::io::Error] encountered while generating files
17    /// for the data visualization.
18    Io(IoError),
19
20    /// A [tinytemplate::error::Error] encountered while parsing rendering
21    /// a template file.
22    TemplateError(TinyTemplateError),
23}
24
25impl Error for VisError {}
26
27impl Display for VisError {
28    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
29        let vis_error = "vis error:";
30
31        match self {
32            VisError::Io(error) => write!(f, "{vis_error} I/O error: {error}"),
33            VisError::TemplateError(error) => write!(f, "{vis_error} template error: {error}"),
34        }
35    }
36}
37
38impl From<TinyTemplateError> for VisError {
39    fn from(error: TinyTemplateError) -> Self {
40        VisError::TemplateError(error)
41    }
42}
43
44impl From<IoError> for VisError {
45    fn from(error: IoError) -> Self {
46        VisError::Io(error)
47    }
48}