#[derive(Debug, Clone)]
pub enum DiffProgress {
Started { total: usize },
File { path: String, processed: usize, total: usize },
Sorting,
Done { total_files: usize },
}
pub trait ProgressSink: Send + Sync {
fn emit(&self, event: DiffProgress);
}
#[derive(Default)]
pub struct NullProgress;
impl ProgressSink for NullProgress {
fn emit(&self, _: DiffProgress) {}
}
pub struct ChannelProgress {
tx: std::sync::mpsc::Sender<DiffProgress>,
}
impl ChannelProgress {
pub fn new(tx: std::sync::mpsc::Sender<DiffProgress>) -> Self {
Self { tx }
}
}
impl ProgressSink for ChannelProgress {
fn emit(&self, event: DiffProgress) {
let _ = self.tx.send(event);
}
}
#[cfg(test)]
mod tests;