Skip to main content

type_bridge_server/
error.rs

1#[derive(Debug, thiserror::Error)]
2pub enum PipelineError {
3    #[error("Configuration error: {0}")]
4    Config(String),
5    #[error("TypeDB connection error: {0}")]
6    Connection(String),
7    #[error("Unsupported version: {0}")]
8    UnsupportedVersion(#[from] type_bridge_core_lib::version::VersionError),
9    #[error("Query execution error: {0}")]
10    QueryExecution(String),
11    #[error("Validation error: {0}")]
12    Validation(String),
13    #[error("Parse error: {0}")]
14    Parse(String),
15    #[error("Schema error: {0}")]
16    Schema(String),
17    #[error("Interceptor error: {0}")]
18    Interceptor(String),
19    #[error("Internal error: {0}")]
20    Internal(String),
21}
22
23#[cfg(test)]
24#[cfg_attr(coverage_nightly, coverage(off))]
25mod tests {
26    use super::*;
27
28    #[test]
29    fn display_config_error() {
30        let e = PipelineError::Config("bad config".into());
31        assert_eq!(e.to_string(), "Configuration error: bad config");
32    }
33
34    #[test]
35    fn display_connection_error() {
36        let e = PipelineError::Connection("refused".into());
37        assert_eq!(e.to_string(), "TypeDB connection error: refused");
38    }
39
40    #[test]
41    fn display_query_execution_error() {
42        let e = PipelineError::QueryExecution("syntax error".into());
43        assert_eq!(e.to_string(), "Query execution error: syntax error");
44    }
45
46    #[test]
47    fn display_validation_error() {
48        let e = PipelineError::Validation("invalid type".into());
49        assert_eq!(e.to_string(), "Validation error: invalid type");
50    }
51
52    #[test]
53    fn display_parse_error() {
54        let e = PipelineError::Parse("unexpected token".into());
55        assert_eq!(e.to_string(), "Parse error: unexpected token");
56    }
57
58    #[test]
59    fn display_schema_error() {
60        let e = PipelineError::Schema("file not found".into());
61        assert_eq!(e.to_string(), "Schema error: file not found");
62    }
63
64    #[test]
65    fn display_interceptor_error() {
66        let e = PipelineError::Interceptor("access denied".into());
67        assert_eq!(e.to_string(), "Interceptor error: access denied");
68    }
69
70    #[test]
71    fn display_internal_error() {
72        let e = PipelineError::Internal("unexpected".into());
73        assert_eq!(e.to_string(), "Internal error: unexpected");
74    }
75
76    #[test]
77    fn debug_format() {
78        let e = PipelineError::Config("test".into());
79        let debug = format!("{:?}", e);
80        assert!(debug.contains("Config"));
81    }
82
83    #[test]
84    fn display_unsupported_version_error() {
85        use type_bridge_core_lib::version::{Version, VersionError};
86        let inner = VersionError::Unsupported {
87            component: "server",
88            found: Version::new(2, 28, 0),
89        };
90        let e = PipelineError::UnsupportedVersion(inner);
91        let msg = e.to_string();
92        assert!(msg.contains("Unsupported version"), "missing prefix: {msg}");
93        assert!(msg.contains("2.28.0"), "missing detected version: {msg}");
94    }
95}