1use std::sync::Arc;
2
3use ps_hash::Hash;
4use ps_mbuf::Mbuf;
5
6use crate::DataChunk;
7
8#[derive(Clone, Copy)]
9pub struct MbufDataChunk<'lt> {
10 inner: &'lt Mbuf<'lt, Hash, u8>,
11}
12
13impl<'lt> From<&'lt Mbuf<'lt, Hash, u8>> for MbufDataChunk<'lt> {
14 fn from(inner: &'lt Mbuf<'lt, Hash, u8>) -> Self {
15 Self { inner }
16 }
17}
18
19impl<'lt> DataChunk for MbufDataChunk<'lt> {
20 fn data_ref(&self) -> &[u8] {
21 self.inner
22 }
23
24 fn hash_ref(&self) -> &Hash {
25 self.inner.get_metadata()
26 }
27
28 fn hash(&self) -> Arc<Hash> {
29 Arc::from(*self.inner.get_metadata())
30 }
31
32 fn into_owned(self) -> crate::OwnedDataChunk {
34 crate::OwnedDataChunk::from_data_and_hash(Arc::from(self.data_ref()), self.hash())
35 }
36}