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 pub(crate) const fn from_prefix(bytes: bytes::Prefix<'a, { transfer::MAX_BYTES }>) -> Self {
12 Self(bytes)
13 }
14
15 #[must_use]
16 pub fn prefix(bytes: &'a [u8]) -> Self {
17 Self(bytes::Prefix::new(bytes))
18 }
19
20 #[must_use]
21 pub fn into_parts(self) -> (&'a [u8], transfer::Len) {
22 let bytes = self.0.as_slice();
23 (bytes, self.len())
24 }
25
26 pub(crate) const fn into_prefix(self) -> bytes::Prefix<'a, { transfer::MAX_BYTES }> {
27 self.0
28 }
29
30 #[must_use]
31 pub const fn len(&self) -> transfer::Len {
32 transfer::Len::from_bound(self.0.len())
33 }
34
35 #[must_use]
36 pub const fn as_slice(&self) -> &'a [u8] {
37 self.0.as_slice()
38 }
39}
40
41const _: () = assert!(std::mem::size_of::<View<'static>>() == std::mem::size_of::<&'static [u8]>());