dope_core/io/transfer/
view.rs1use o3::buffer::bytes;
2
3use crate::io::transfer;
4
5#[derive(Clone, Copy)]
7#[repr(transparent)]
8pub struct View<'a>(bytes::Prefix<'a, { transfer::MAX_BYTES }>);
9
10impl<'a> View<'a> {
11 #[must_use]
12 pub fn prefix(bytes: &'a [u8]) -> Self {
13 Self(bytes::Prefix::new(bytes))
14 }
15
16 #[must_use]
17 pub fn into_parts(self) -> (&'a [u8], transfer::Len) {
18 let bytes = self.0.into_slice();
19 (bytes, self.len())
20 }
21
22 pub(crate) const fn into_prefix(self) -> bytes::Prefix<'a, { transfer::MAX_BYTES }> {
23 self.0
24 }
25
26 #[must_use]
27 pub const fn len(&self) -> transfer::Len {
28 transfer::Len::from_bound(self.0.len())
29 }
30
31 #[must_use]
32 pub const fn as_slice(&self) -> &'a [u8] {
33 self.0.as_slice()
34 }
35}
36
37const _: () = assert!(std::mem::size_of::<View<'static>>() == std::mem::size_of::<&'static [u8]>());