use thiserror::Error;
use std::path::PathBuf;
use notify::Error as NotifyError;
#[derive(Error, Debug)]
pub enum SyncError {
#[error("Source directory not found: {0}")]
SourceNotFound(PathBuf),
#[error("Target directory is not writable: {0}")]
TargetNotWritable(PathBuf),
#[error("File is in use or permission denied: {0}")]
PermissionDenied(PathBuf),
#[error("Directory traversal error: {0}")]
WalkError(#[from] walkdir::Error),
#[error("I/O error: {0}")]
IoError(#[from] std::io::Error),
#[error("File watcher error: {0}")]
WatchError(#[from] NotifyError),
#[error("Sync logic error: {0}")]
SyncLogicError(String),
#[error("Failed to delete extra files: {0}")]
DeleteError(String),
}
impl From<anyhow::Error> for SyncError {
fn from(err: anyhow::Error) -> Self {
SyncError::SyncLogicError(err.to_string())
}
}