use crate::decoder::{
    buffer::DecoderBuffer,
    value::{DecoderParameterizedValueMut, DecoderValueMut},
    DecoderError,
};
pub type DecoderBufferMutResult<'a, T> = Result<(T, DecoderBufferMut<'a>), DecoderError>;
#[derive(Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
pub struct DecoderBufferMut<'a> {
    bytes: &'a mut [u8],
}
impl<'a> DecoderBufferMut<'a> {
    #[inline]
    pub fn new(bytes: &'a mut [u8]) -> Self {
        Self { bytes }
    }
    #[inline]
    pub fn freeze(self) -> DecoderBuffer<'a> {
        DecoderBuffer::new(self.bytes)
    }
    #[inline]
    pub fn into_less_safe_slice(self) -> &'a mut [u8] {
        self.bytes
    }
    #[inline]
    pub fn as_less_safe_slice_mut(&'a mut self) -> &'a mut [u8] {
        self.bytes
    }
}
impl_buffer!(
    DecoderBufferMut,
    DecoderBufferMutResult,
    DecoderValueMut,
    decode_mut,
    DecoderParameterizedValueMut,
    decode_parameterized_mut,
    split_at_mut
);
impl<'a> From<DecoderBufferMut<'a>> for DecoderBuffer<'a> {
    fn from(b: DecoderBufferMut<'a>) -> Self {
        b.freeze()
    }
}