Skip to main content

syncbox/infra/
error.rs

1use thiserror::Error;
2use std::path::PathBuf;
3use notify::Error as NotifyError; // 引入notify库的错误类型
4
5#[derive(Error, Debug)]
6pub enum SyncError {
7    #[error("Source directory not found: {0}")]
8    SourceNotFound(PathBuf),
9
10    #[error("Target directory is not writable: {0}")]
11    TargetNotWritable(PathBuf),
12
13    #[error("File is in use or permission denied: {0}")]
14    PermissionDenied(PathBuf),
15
16    #[error("Directory traversal error: {0}")]
17    WalkError(#[from] walkdir::Error),
18
19    #[error("I/O error: {0}")]
20    IoError(#[from] std::io::Error),
21
22    // 新增:文件监听错误(notify库的错误)
23    #[error("File watcher error: {0}")]
24    WatchError(#[from] NotifyError),
25
26    // 新增:同步逻辑中的通用错误(包装anyhow::Error)
27    #[error("Sync logic error: {0}")]
28    SyncLogicError(String),
29
30    // 新增:删除额外文件时的错误
31    #[error("Failed to delete extra files: {0}")]
32    DeleteError(String),
33}
34
35// 为anyhow::Error实现转换(需在SyncError所在模块中)
36impl From<anyhow::Error> for SyncError {
37    fn from(err: anyhow::Error) -> Self {
38        SyncError::SyncLogicError(err.to_string())
39    }
40}