use derive_more::derive::{Add, AddAssign, Deref, DerefMut, Sub, SubAssign};
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
#[derive(Add, AddAssign, Sub, SubAssign)]
pub struct Progress {
pub done: u32,
pub total: u32,
}
impl From<bool> for Progress {
fn from(b: bool) -> Progress {
Progress {
total: 1,
done: b as u32,
}
}
}
impl From<Progress> for f32 {
fn from(p: Progress) -> f32 {
p.done as f32 / p.total as f32
}
}
impl From<Progress> for f64 {
fn from(p: Progress) -> f64 {
p.done as f64 / p.total as f64
}
}
impl Progress {
pub fn is_ready(self) -> bool {
self.done >= self.total
}
}
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
#[derive(Add, AddAssign, Sub, SubAssign)]
#[derive(Deref, DerefMut)]
pub struct HiddenProgress(pub Progress);
impl From<Progress> for HiddenProgress {
fn from(value: Progress) -> Self {
Self(value)
}
}
impl From<HiddenProgress> for Progress {
fn from(value: HiddenProgress) -> Self {
value.0
}
}
impl From<bool> for HiddenProgress {
fn from(b: bool) -> HiddenProgress {
Progress::from(b).into()
}
}
impl From<HiddenProgress> for f32 {
fn from(p: HiddenProgress) -> f32 {
f32::from(p.0)
}
}
impl From<HiddenProgress> for f64 {
fn from(p: HiddenProgress) -> f64 {
f64::from(p.0)
}
}