use super::pending_value::PendingValue;
use crate::{
CapacityError,
Codec,
TranscodeEncodeEngine,
TranscodeEncodeHooks,
};
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub(in crate::transcode) struct PendingValueSlot<Value> {
value: Option<PendingValue<Value>>,
}
impl<Value> PendingValueSlot<Value> {
#[inline(always)]
#[must_use]
pub(in crate::transcode) const fn empty() -> Self {
Self { value: None }
}
#[must_use = "capacity planning can fail on overflow"]
#[inline]
pub(in crate::transcode) fn max_output_len<E, H>(
&self,
engine: &TranscodeEncodeEngine<E, H>,
) -> Result<usize, CapacityError>
where
E: Codec<Value = Value>,
H: TranscodeEncodeHooks<E>,
{
if self.value.is_some() {
engine.max_output_len(1)
} else {
Ok(0)
}
}
#[inline(always)]
pub(in crate::transcode) fn clear(&mut self) {
self.value = None;
}
#[inline(always)]
pub(in crate::transcode) fn take(&mut self) -> Option<PendingValue<Value>> {
self.value.take()
}
#[inline(always)]
pub(in crate::transcode) fn put(&mut self, pending: PendingValue<Value>) {
self.value = Some(pending);
}
}