ps_datachunk/borrowed/
mod.rs1use 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}