use crate::domain::error::DomainError;
use crate::infra::error::InfraError;
#[derive(Debug, thiserror::Error)]
pub enum SyncError {
#[error(transparent)]
Domain(#[from] DomainError),
#[error(transparent)]
Infra(#[from] InfraError),
#[error("path is outside sync root: {path}")]
OutsideSyncRoot { path: String },
#[error("duplicate file: {path} is a duplicate of {duplicate_of}")]
Duplicate { path: String, duplicate_of: String },
#[error("file not registered in sync store: {0}")]
NotRegistered(String),
#[error("initialization failed: {0}")]
Init(String),
#[error("backend not configured for location: {0}")]
NoBackend(String),
#[error("no route available: {src} → {dest}, path={path}")]
NoRouteAvailable {
src: String,
dest: String,
path: String,
},
}
impl From<std::io::Error> for SyncError {
fn from(e: std::io::Error) -> Self {
Self::Infra(InfraError::Io(e))
}
}
impl From<serde_json::Error> for SyncError {
fn from(e: serde_json::Error) -> Self {
Self::Infra(InfraError::Serialization(e.to_string()))
}
}