Skip to main content

veloq_vis/
error.rs

1use thiserror::Error;
2use veloq_core::{ErrorCode, VeloqDiagnostic};
3
4#[derive(Debug, Error)]
5pub enum VisualizationError {
6    #[error("visualization time window must be positive (start_ns={start_ns}, end_ns={end_ns})")]
7    NonPositiveWindow { start_ns: i64, end_ns: i64 },
8
9    #[error("visualization artifact path must be relative and stay under the artifact root")]
10    UnsafeRelativePath,
11
12    #[error("visualization artifact filename must be a plain `.svg` filename")]
13    UnsafeSvgFileName,
14
15    #[error("failed to create visualization artifact directory `{path}`")]
16    CreateArtifactDir {
17        path: String,
18        #[source]
19        source: std::io::Error,
20    },
21
22    #[error("failed to write visualization artifact `{path}`")]
23    WriteArtifact {
24        path: String,
25        #[source]
26        source: std::io::Error,
27    },
28
29    #[error("failed to publish visualization artifact `{path}`")]
30    PublishArtifact {
31        path: String,
32        #[source]
33        source: std::io::Error,
34    },
35}
36
37impl VeloqDiagnostic for VisualizationError {
38    fn code(&self) -> ErrorCode {
39        match self {
40            Self::NonPositiveWindow { .. } => ErrorCode::new("viz.non-positive-window"),
41            Self::UnsafeRelativePath => ErrorCode::new("viz.unsafe-relative-path"),
42            Self::UnsafeSvgFileName => ErrorCode::new("viz.unsafe-svg-filename"),
43            Self::CreateArtifactDir { .. } => ErrorCode::new("viz.artifact-dir-create"),
44            Self::WriteArtifact { .. } => ErrorCode::new("viz.artifact-write"),
45            Self::PublishArtifact { .. } => ErrorCode::new("viz.artifact-publish"),
46        }
47    }
48}