use super::CoderStatus;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct CoderProgress {
status: CoderStatus,
read: usize,
written: usize,
}
impl CoderProgress {
#[must_use]
#[inline]
pub const fn new(status: CoderStatus, read: usize, written: usize) -> Self {
Self { status, read, written }
}
#[must_use]
#[inline]
pub const fn complete(read: usize, written: usize) -> Self {
Self::new(CoderStatus::Complete, read, written)
}
#[must_use]
#[inline]
pub const fn status(self) -> CoderStatus {
self.status
}
#[must_use]
#[inline]
pub const fn read(self) -> usize {
self.read
}
#[must_use]
#[inline]
pub const fn written(self) -> usize {
self.written
}
#[must_use]
#[inline]
pub const fn required(self) -> usize {
match self.status {
CoderStatus::Complete => 0,
CoderStatus::NeedInput { required, .. } => required,
CoderStatus::NeedOutput { required, .. } => required,
}
}
#[must_use]
#[inline]
pub const fn index(self) -> Option<usize> {
match self.status {
CoderStatus::Complete => None,
CoderStatus::NeedInput { input_index, .. } => Some(input_index),
CoderStatus::NeedOutput { output_index, .. } => Some(output_index),
}
}
#[must_use]
#[inline]
pub const fn available(self) -> usize {
match self.status {
CoderStatus::Complete => 0,
CoderStatus::NeedInput { available, .. } => available,
CoderStatus::NeedOutput { available, .. } => available,
}
}
}