use super::super::engine::TranscodeEncodeEngine;
use super::super::engine::TranscodeEncodeHooks;
use super::pending_value::PendingValue;
use crate::CapacityError;
use crate::Codec;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub(in crate::transcode) struct PendingValueSlot<Value> {
value: Option<PendingValue<Value>>,
}
impl<Value> PendingValueSlot<Value> {
#[must_use]
#[inline]
pub(in crate::transcode) const fn empty() -> Self {
Self { value: None }
}
#[inline]
pub(in crate::transcode) fn current_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_transcode_output_len(1)
} else {
Ok(0)
}
}
#[inline]
pub(in crate::transcode) fn put(&mut self, pending: PendingValue<Value>) {
self.value = Some(pending);
}
#[inline]
pub(in crate::transcode) fn take(&mut self) -> Option<PendingValue<Value>> {
self.value.take()
}
#[inline]
pub(in crate::transcode) fn clear(&mut self) {
self.value = None;
}
}