#[derive(Debug, Clone)]
pub struct FinishProgress {
pub phase: FinishPhase,
pub rows_written: u64,
pub batches_written: u64,
pub total_rows: u64,
pub num_runs: usize,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FinishPhase {
CopyThrough,
Merging,
}
impl FinishProgress {
pub fn fraction_complete(&self) -> f64 {
if self.total_rows == 0 {
1.0
} else {
self.rows_written as f64 / self.total_rows as f64
}
}
}
pub trait FinishProgressHandler {
fn on_batch_written(&mut self, progress: &FinishProgress);
}
impl<F: FnMut(&FinishProgress)> FinishProgressHandler for F {
fn on_batch_written(&mut self, progress: &FinishProgress) {
self(progress);
}
}
pub(crate) struct NoopProgressHandler;
impl FinishProgressHandler for NoopProgressHandler {
fn on_batch_written(&mut self, _: &FinishProgress) {}
}