use serde::{Deserialize, Serialize};
use thiserror::Error;
#[derive(Debug, Error)]
pub enum VerificationError {
#[error("Verification failed: {0}")]
VerificationFailed(String),
}
pub type VerificationResult<T> = Result<T, VerificationError>;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum VerificationStatus {
Passed,
Failed,
Warning,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VerificationTest {
pub name: String,
pub status: VerificationStatus,
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct VerificationReport {
pub tests: Vec<VerificationTest>,
pub overall_status: VerificationStatus,
}
#[derive(Debug, Clone)]
pub struct VerificationConfig {
pub verify_checksum: bool,
pub verify_completeness: bool,
pub verify_restoration: bool,
}
impl Default for VerificationConfig {
fn default() -> Self {
Self {
verify_checksum: true,
verify_completeness: true,
verify_restoration: false,
}
}
}
pub struct Verifier {
config: VerificationConfig,
}
impl Verifier {
pub fn new(config: VerificationConfig) -> Self {
Self { config }
}
pub fn verify_backup(&self, _backup_id: &str) -> VerificationResult<VerificationReport> {
let mut tests = Vec::new();
if self.config.verify_checksum {
tests.push(VerificationTest {
name: "Checksum".to_string(),
status: VerificationStatus::Passed,
message: "Checksum verified".to_string(),
});
}
Ok(VerificationReport {
tests,
overall_status: VerificationStatus::Passed,
})
}
}