use core::num::NonZeroUsize;
use crate::Codec;
pub type DecodeInvalidActionOf<C> = DecodeInvalidAction<<C as Codec>::Value>;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[non_exhaustive]
pub enum DecodeInvalidAction<Value> {
Reject,
Skip {
consumed: NonZeroUsize,
},
Emit {
value: Value,
consumed: NonZeroUsize,
},
}
impl<Value> DecodeInvalidAction<Value> {
#[inline(always)]
#[must_use]
pub(super) fn bound_consumed(
consumed: NonZeroUsize,
available: usize,
) -> NonZeroUsize {
assert!(
available > 0,
"DecodeInvalidAction cannot consume empty input",
);
assert!(
consumed.get() <= available,
"DecodeInvalidAction consumed units must not exceed available input",
);
consumed
}
}