use core::slice::SliceIndex;
use crate::traits::{UnsizedZeroCopy, ZeroCopy};
use crate::{Buf, ByteOrder, Error, Ref, Size};
mod sealed {
#[cfg(feature = "alloc")]
use crate::buf::OwnedBuf;
use crate::buf::SliceMut;
use crate::{ByteOrder, Size};
pub trait Sealed {}
impl<'a, E: ByteOrder, O: Size> Sealed for SliceMut<'a, E, O> {}
#[cfg(feature = "alloc")]
impl<E: ByteOrder, O: Size> Sealed for OwnedBuf<E, O> {}
}
#[allow(clippy::len_without_is_empty)]
pub trait StoreBuf: self::sealed::Sealed {
type ByteOrder: ByteOrder;
type Size: Size;
#[doc(hidden)]
fn len(&self) -> usize;
#[doc(hidden)]
fn truncate(&mut self, len: usize);
#[doc(hidden)]
fn store_unsized<T: ?Sized>(&mut self, value: &T) -> Ref<T, Self::ByteOrder, Self::Size>
where
T: UnsizedZeroCopy;
#[doc(hidden)]
fn store<T>(&mut self, value: &T) -> Ref<T, Self::ByteOrder, Self::Size>
where
T: ZeroCopy;
#[doc(hidden)]
fn swap<T>(
&mut self,
a: Ref<T, Self::ByteOrder, Self::Size>,
b: Ref<T, Self::ByteOrder, Self::Size>,
) -> Result<(), Error>
where
T: ZeroCopy;
#[doc(hidden)]
fn align_in_place(&mut self);
#[doc(hidden)]
fn next_offset<T>(&mut self) -> usize;
#[doc(hidden)]
fn next_offset_with_and_reserve(&mut self, align: usize, reserve: usize);
#[doc(hidden)]
fn fill(&mut self, byte: u8, len: usize);
#[doc(hidden)]
fn get<I>(&self, index: I) -> Option<&I::Output>
where
I: SliceIndex<[u8]>;
#[doc(hidden)]
fn get_mut<I>(&mut self, index: I) -> Option<&mut I::Output>
where
I: SliceIndex<[u8]>;
#[doc(hidden)]
fn as_buf(&self) -> &Buf;
#[doc(hidden)]
fn as_mut_buf(&mut self) -> &mut Buf;
}