Skip to main content

bone_persistence/
error.rs

1use thiserror::Error;
2
3/// 持久化层错误类型
4#[derive(Error, Debug)]
5pub enum PersistenceError {
6    #[error("初始化错误: {message}")]
7    InitError { message: String },
8
9    #[error("数据未找到: {message}")]
10    NotFound { message: String },
11
12    #[error("合并错误: {message}")]
13    MergeError { message: String },
14
15    #[error("后端({backend_type})错误: {error}")]
16    BackendError { backend_type: String, error: String },
17
18    #[error("通用错误: {0}")]
19    Generic(#[from] anyhow::Error),
20}
21
22/// 持久化层结果类型
23pub type Result<T> = std::result::Result<T, PersistenceError>;
24
25impl From<std::io::Error> for PersistenceError {
26    fn from(err: std::io::Error) -> Self {
27        PersistenceError::Generic(anyhow::Error::from(err))
28    }
29}
30
31impl From<sqlx::Error> for PersistenceError {
32    fn from(err: sqlx::Error) -> Self {
33        PersistenceError::Generic(anyhow::Error::from(err))
34    }
35}
36
37impl From<serde_json::Error> for PersistenceError {
38    fn from(err: serde_json::Error) -> Self {
39        PersistenceError::Generic(anyhow::Error::from(err))
40    }
41}