use std::{sync::Arc, usize};
pub struct LoadingElement {
max: usize,
progress: usize,
name: Arc<Box<str>>, formatter: Option< fn(usize) -> Box<str> >,
}
impl LoadingElement {
pub fn new(max: usize, name: Box<str>, formatter: Option< fn(usize) -> Box<str> >) -> LoadingElement {
LoadingElement { max: (max), progress: (0), name: (Arc::new(name)), formatter: (formatter) }
}
pub fn get_progress(&self) -> usize {
return self.progress;
}
pub fn get_progress_decimal(&self) -> f64 {
return self.progress as f64 / self.max as f64;
}
pub fn get_max(&self) -> usize {
return self.max;
}
pub fn get_name(&self) -> Arc<Box<str>> {
return self.name.clone();
}
pub fn format_progress_unit(&self, value: usize) -> Box<str> {
match self.formatter {
None => Box::from(value.to_string()),
Some (format_function) => { format_function(value) },
}
}
pub fn set_max(&mut self, max: usize) {
self.max = max;
}
pub fn update(&mut self, addition: usize) {
self.progress += addition;
}
}