use core::num::NonZeroUsize;
use super::super::transcode_progress::TranscodeProgress;
use super::encode_state::EncodeState;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub(in crate::transcode) enum EncodeStep {
Written {
written: usize,
},
NeedOutput {
additional: NonZeroUsize,
available: usize,
},
}
impl EncodeStep {
#[inline(always)]
pub(in crate::transcode) const fn written(written: usize) -> Self {
Self::Written { written }
}
#[inline(always)]
pub(in crate::transcode) fn need_output(
required: usize,
available: usize,
) -> Self {
let additional = qubit_io::nz!(required - available);
Self::NeedOutput {
additional,
available,
}
}
#[inline]
pub(in crate::transcode) fn apply_to_state<Value, Unit>(
self,
state: &mut EncodeState<'_, Value, Unit>,
) -> Option<TranscodeProgress> {
match self {
Self::Written { written } => {
state.accept_written_value(written);
None
}
Self::NeedOutput {
additional,
available,
} => Some(state.need_output_progress_with(additional, available)),
}
}
}