use std::time::Duration;
use super::{
ProgressCounters,
ProgressEventBuilder,
ProgressPhase,
ProgressStage,
};
#[derive(Debug, Clone, PartialEq)]
pub struct ProgressEvent {
phase: ProgressPhase,
stage: Option<ProgressStage>,
counters: ProgressCounters,
elapsed: Duration,
}
impl ProgressEvent {
#[inline]
pub const fn builder() -> ProgressEventBuilder {
ProgressEventBuilder::new()
}
#[inline]
pub fn new(builder: ProgressEventBuilder) -> Self {
Self {
phase: builder.phase,
stage: builder.stage,
counters: builder.counters,
elapsed: builder.elapsed,
}
}
#[inline]
pub const fn started(counters: ProgressCounters, elapsed: Duration) -> Self {
Self {
phase: ProgressPhase::Started,
stage: None,
counters,
elapsed,
}
}
#[inline]
pub const fn running(counters: ProgressCounters, elapsed: Duration) -> Self {
Self {
phase: ProgressPhase::Running,
stage: None,
counters,
elapsed,
}
}
#[inline]
pub const fn finished(counters: ProgressCounters, elapsed: Duration) -> Self {
Self {
phase: ProgressPhase::Finished,
stage: None,
counters,
elapsed,
}
}
#[inline]
pub const fn failed(counters: ProgressCounters, elapsed: Duration) -> Self {
Self {
phase: ProgressPhase::Failed,
stage: None,
counters,
elapsed,
}
}
#[inline]
pub const fn canceled(counters: ProgressCounters, elapsed: Duration) -> Self {
Self {
phase: ProgressPhase::Canceled,
stage: None,
counters,
elapsed,
}
}
#[inline]
pub const fn from_phase(
phase: ProgressPhase,
counters: ProgressCounters,
elapsed: Duration,
) -> Self {
match phase {
ProgressPhase::Started => Self::started(counters, elapsed),
ProgressPhase::Running => Self::running(counters, elapsed),
ProgressPhase::Finished => Self::finished(counters, elapsed),
ProgressPhase::Failed => Self::failed(counters, elapsed),
ProgressPhase::Canceled => Self::canceled(counters, elapsed),
}
}
#[inline]
pub fn with_stage(mut self, stage: ProgressStage) -> Self {
self.stage = Some(stage);
self
}
#[inline]
pub const fn phase(&self) -> ProgressPhase {
self.phase
}
#[inline]
pub const fn stage(&self) -> Option<&ProgressStage> {
self.stage.as_ref()
}
#[inline]
pub const fn counters(&self) -> ProgressCounters {
self.counters
}
#[inline]
pub const fn elapsed(&self) -> Duration {
self.elapsed
}
}