erio_context_store/
error.rs1use thiserror::Error;
4
5#[derive(Debug, Error)]
7pub enum ContextStoreError {
8 #[error("Storage error: {0}")]
9 Storage(String),
10
11 #[error("Embedding error: {0}")]
12 Embedding(String),
13
14 #[error("Invalid input: {0}")]
15 InvalidInput(String),
16
17 #[error("Document not found: {0}")]
18 NotFound(String),
19}
20
21impl ContextStoreError {
22 pub fn is_retryable(&self) -> bool {
24 matches!(self, Self::Storage(_))
25 }
26}
27
28impl From<ContextStoreError> for erio_core::CoreError {
29 fn from(err: ContextStoreError) -> Self {
30 Self::ContextStore {
31 message: err.to_string(),
32 }
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use super::*;
39
40 #[test]
43 fn storage_error_displays_message() {
44 let err = ContextStoreError::Storage("disk full".into());
45 assert_eq!(err.to_string(), "Storage error: disk full");
46 }
47
48 #[test]
49 fn embedding_error_displays_message() {
50 let err = ContextStoreError::Embedding("inference failed".into());
51 assert_eq!(err.to_string(), "Embedding error: inference failed");
52 }
53
54 #[test]
55 fn invalid_input_displays_message() {
56 let err = ContextStoreError::InvalidInput("empty text".into());
57 assert_eq!(err.to_string(), "Invalid input: empty text");
58 }
59
60 #[test]
61 fn not_found_displays_message() {
62 let err = ContextStoreError::NotFound("doc_123".into());
63 assert_eq!(err.to_string(), "Document not found: doc_123");
64 }
65
66 #[test]
69 fn storage_error_is_retryable() {
70 let err = ContextStoreError::Storage("timeout".into());
71 assert!(err.is_retryable());
72 }
73
74 #[test]
75 fn embedding_error_is_not_retryable() {
76 let err = ContextStoreError::Embedding("model failed".into());
77 assert!(!err.is_retryable());
78 }
79
80 #[test]
81 fn invalid_input_is_not_retryable() {
82 let err = ContextStoreError::InvalidInput("empty".into());
83 assert!(!err.is_retryable());
84 }
85
86 #[test]
87 fn not_found_is_not_retryable() {
88 let err = ContextStoreError::NotFound("id".into());
89 assert!(!err.is_retryable());
90 }
91
92 #[test]
95 fn converts_to_core_error() {
96 let err = ContextStoreError::Storage("test".into());
97 let core_err: erio_core::CoreError = err.into();
98 assert!(matches!(
99 core_err,
100 erio_core::CoreError::ContextStore { .. }
101 ));
102 }
103
104 #[test]
105 fn conversion_preserves_message() {
106 let err = ContextStoreError::InvalidInput("bad input".into());
107 let core_err: erio_core::CoreError = err.into();
108 match core_err {
109 erio_core::CoreError::ContextStore { message } => {
110 assert_eq!(message, "Invalid input: bad input");
111 }
112 _ => panic!("Expected CoreError::ContextStore"),
113 }
114 }
115}