use async_trait::async_trait;
use std::path::Path;
#[must_use]
#[derive(Debug, Clone)]
pub struct VerifyResult {
pub is_complete: bool,
pub damaged_blocks: u32,
pub recovery_blocks_available: u32,
pub repairable: bool,
pub damaged_files: Vec<String>,
pub missing_files: Vec<String>,
}
#[must_use]
#[derive(Debug, Clone)]
pub struct RepairResult {
pub success: bool,
pub repaired_files: Vec<String>,
pub failed_files: Vec<String>,
pub error: Option<String>,
}
#[derive(Debug, Clone, Copy)]
pub struct ParityCapabilities {
pub can_verify: bool,
pub can_repair: bool,
}
#[async_trait]
pub trait ParityHandler: Send + Sync {
async fn verify(&self, par2_file: &Path) -> crate::Result<VerifyResult>;
async fn repair(&self, par2_file: &Path) -> crate::Result<RepairResult>;
fn capabilities(&self) -> ParityCapabilities;
fn name(&self) -> &'static str;
}