smos_application/errors/
repo_error.rs1use thiserror::Error;
9
10#[derive(Debug, Error)]
12pub enum RepoError {
13 #[error("surrealdb connect failed: {0}")]
14 ConnectFailed(String),
15
16 #[error("surrealdb query failed: {0}")]
17 QueryFailed(String),
18
19 #[error("surrealdb serialization failed: {0}")]
20 SerializationFailed(String),
21
22 #[error("surrealdb transaction conflict")]
23 TransactionConflict,
24
25 #[error("vector dimension mismatch: expected {expected}, got {actual}")]
26 VectorDimensionMismatch { expected: usize, actual: usize },
27
28 #[error("record not found: {0}")]
29 NotFound(String),
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35
36 #[test]
37 fn display_includes_inner_message() {
38 let e = RepoError::QueryFailed("syntax error near 'FOO'".into());
39 assert!(e.to_string().contains("syntax error near 'FOO'"));
40 }
41
42 #[test]
43 fn transaction_conflict_display_is_stable() {
44 assert_eq!(
45 RepoError::TransactionConflict.to_string(),
46 "surrealdb transaction conflict"
47 );
48 }
49
50 #[test]
51 fn vector_dimension_mismatch_display_shows_both_sides() {
52 let e = RepoError::VectorDimensionMismatch {
53 expected: 1024,
54 actual: 768,
55 };
56 let msg = e.to_string();
57 assert!(msg.contains("1024") && msg.contains("768"));
58 }
59}