use sos_core::{commit::CommitHash, AccountId};
use std::path::PathBuf;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum Error {
#[error("archive file '{0}' already exists")]
ArchiveFileExists(PathBuf),
#[error("archive file '{0}' does not exist")]
ArchiveFileNotExists(PathBuf),
#[error("archive '{0}' manifest does not exist or is invalid")]
InvalidArchiveManifest(PathBuf),
#[error("archive '{0}' is missing the database '{1}'")]
NoDatabaseFile(PathBuf, String),
#[error(
"import failed, account '{0}' does not exist in the backup archive"
)]
ImportSourceNotExists(AccountId),
#[error("import failed, account '{0}' already exists")]
ImportTargetExists(AccountId),
#[error("database checksum is invalid, expected '{0}' but computed '{1}' (archive may be corrupt?)")]
DatabaseChecksum(CommitHash, CommitHash),
#[error(transparent)]
TryFromSlice(#[from] std::array::TryFromSliceError),
#[error(transparent)]
Database(#[from] crate::Error),
#[error(transparent)]
Io(#[from] std::io::Error),
#[error(transparent)]
Json(#[from] serde_json::Error),
#[error(transparent)]
ZipArchive(#[from] sos_archive::Error),
#[error(transparent)]
AsyncSqlite(#[from] async_sqlite::Error),
#[error(transparent)]
Rusqlite(#[from] async_sqlite::rusqlite::Error),
#[error(transparent)]
Refinery(#[from] refinery::Error),
#[error(transparent)]
Core(#[from] sos_core::Error),
#[error(transparent)]
Vault(#[from] sos_vault::Error),
}