ps_datachunk/borrowed/
mod.rs

1use std::sync::Arc;
2
3use ps_hash::Hash;
4
5use crate::DataChunkTrait;
6
7#[derive(Clone, Debug, Hash, PartialEq, Eq, PartialOrd, Ord)]
8pub struct BorrowedDataChunk<'lt> {
9    data: &'lt [u8],
10    hash: Arc<Hash>,
11}
12
13impl<'lt> BorrowedDataChunk<'lt> {
14    pub fn from_parts(data: &'lt [u8], hash: Arc<Hash>) -> Self {
15        Self { data, hash }
16    }
17
18    pub fn from_data(data: &'lt [u8]) -> Self {
19        let hash = ps_hash::hash(data);
20
21        Self::from_parts(data, hash.into())
22    }
23}
24
25impl<'lt> DataChunkTrait for BorrowedDataChunk<'lt> {
26    fn data_ref(&self) -> &[u8] {
27        self.data
28    }
29    fn hash_ref(&self) -> &[u8] {
30        self.hash.as_bytes()
31    }
32    fn hash(&self) -> Arc<Hash> {
33        self.hash.clone()
34    }
35}
36
37impl<'lt, T: DataChunkTrait> From<&'lt T> for BorrowedDataChunk<'lt> {
38    fn from(chunk: &'lt T) -> Self {
39        Self::from_parts(chunk.data_ref(), chunk.hash())
40    }
41}