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}