1use thiserror::Error;
2
3#[derive(Debug, Error)]
5pub enum MemoryError {
6 #[error("git error: {0}")]
8 Git(#[from] git2::Error),
9
10 #[error("embedding error: {0}")]
12 Embedding(String),
13
14 #[error("index error: {0}")]
16 Index(String),
17
18 #[error("io error: {0}")]
20 Io(#[from] std::io::Error),
21
22 #[error("memory not found: {name}")]
24 NotFound {
25 name: String,
27 },
28
29 #[error("invalid input: {reason}")]
31 InvalidInput {
32 reason: String,
34 },
35
36 #[error("auth error: {0}")]
38 Auth(String),
39
40 #[error("oauth error: {0}")]
42 OAuth(String),
43
44 #[error("token storage error: {0}")]
46 TokenStorage(String),
47
48 #[error("yaml error: {0}")]
50 Yaml(#[from] serde_yaml::Error),
51
52 #[error("task join error: {0}")]
54 Join(String),
55
56 #[error("internal error: {0}")]
58 Internal(String),
59}
60
61impl From<MemoryError> for rmcp::model::ErrorData {
62 fn from(err: MemoryError) -> Self {
63 let code = match &err {
64 MemoryError::NotFound { .. } | MemoryError::InvalidInput { .. } => {
65 rmcp::model::ErrorCode::INVALID_PARAMS
66 }
67 _ => rmcp::model::ErrorCode::INTERNAL_ERROR,
68 };
69 rmcp::model::ErrorData {
70 code,
71 message: std::borrow::Cow::Owned(err.to_string()),
72 data: None,
73 }
74 }
75}