1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
use crate::unit::Unit;
use std::time::SystemTime;
///
pub mod key;
#[doc(inline)]
pub use key::Key;
mod utils;
#[cfg(feature = "progress-log")]
mod log;
#[cfg(feature = "progress-log")]
pub use self::log::Log;
pub use utils::{Discard, DoOrDiscard, Either, ThroughputOnDrop};
/// The amount of steps a progress can make
pub type Step = usize;
/// Indicate whether a progress can or cannot be made.
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Debug)]
pub enum State {
/// Indicates a task is blocked and cannot indicate progress, optionally until the
/// given time. The task cannot easily be interrupted.
Blocked(&'static str, Option<SystemTime>),
/// Indicates a task cannot indicate progress, optionally until the
/// given time. The task can be interrupted.
Halted(&'static str, Option<SystemTime>),
/// The task is running
Running,
}
impl Default for State {
fn default() -> Self {
State::Running
}
}
/// Progress associated with some item in the progress tree.
#[derive(Clone, Default, Debug)]
pub struct Value {
/// The amount of progress currently made
pub step: Step,
/// The step at which no further progress has to be made.
///
/// If unset, the progress is unbounded.
pub done_at: Option<Step>,
/// The unit associated with the progress.
pub unit: Option<Unit>,
/// Whether progress can be made or not
pub state: State,
}
impl Value {
/// Returns a number between `Some(0.0)` and `Some(1.0)`, or `None` if the progress is unbounded.
///
/// A task half done would return `Some(0.5)`.
pub fn fraction(&self) -> Option<f32> {
self.done_at.map(|done_at| self.step as f32 / done_at as f32)
}
}
/// The value associated with a spot in the hierarchy.
#[derive(Clone, Default, Debug)]
pub struct Task {
/// The name of the `Item` or task.
pub name: String,
/// The progress itself, unless this value belongs to an `Item` serving as organizational unit.
pub progress: Option<Value>,
}