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