use crate::error::Error;
use crate::platform;
use crate::platform::ffi;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ProgressEvent {
AddItems(isize),
AddTotalItems(isize),
AddSize(i64),
AddTotalSize(i64),
}
impl ProgressEvent {
pub fn event(&self) -> Result<String, Error> {
let (kind, value) = self.kind();
platform::outcome(ffi::cz_progress_event_event(kind, value), "name a progress event").map(|outcome| outcome.text())
}
pub fn value(&self) -> i64 {
self.kind().1
}
pub(crate) fn kind(&self) -> (ffi::ProgressKind, i64) {
match *self {
ProgressEvent::AddItems(value) => (ffi::ProgressKind::Items, value as i64),
ProgressEvent::AddTotalItems(value) => (ffi::ProgressKind::TotalItems, value as i64),
ProgressEvent::AddSize(value) => (ffi::ProgressKind::Size, value),
ProgressEvent::AddTotalSize(value) => (ffi::ProgressKind::TotalSize, value),
}
}
}
pub type ProgressHandler = Box<dyn Fn(&[ProgressEvent]) + Send + Sync>;