use crate::{Module, Progress, Result, TimerInfo};
use std::fmt;
use log::trace;
#[derive(Clone, Copy)]
pub struct StopAt {
stop_after: Option<usize>,
}
impl StopAt {
pub fn index(i: usize) -> Self {
Self {
stop_after: Some(i),
}
}
pub fn completion() -> Self {
Self { stop_after: None }
}
}
impl Module for StopAt {
fn post_timer(&mut self, timer: TimerInfo) -> Result<Progress> {
#[allow(clippy::integer_arithmetic)] let stop_after = self.stop_after.unwrap_or(timer.length - 1);
trace!("{}/{}", timer.index, stop_after);
if timer.index >= stop_after {
Ok(Progress::Stop)
} else {
Ok(Progress::Continue)
}
}
}
impl fmt::Debug for StopAt {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "StopAt")
}
}