snix_castore/chunkstore/chunk/
mod.rs1use crate::B3Digest;
4use bytes::Bytes;
5mod builder;
6pub use builder::ChunkBuilder;
7
8#[derive(Clone, Debug, PartialEq, Eq)]
12pub struct Chunk(Bytes);
13
14impl Chunk {
15 pub fn len(&self) -> usize {
17 self.0.len()
18 }
19
20 pub fn is_empty(&self) -> bool {
22 self.len() == 0
23 }
24
25 pub fn digest(&self) -> B3Digest {
27 B3Digest::from(blake3::hash(self.0.as_ref()))
28 }
29
30 pub const fn from_static(bytes: &'static [u8]) -> Self {
32 Self(Bytes::from_static(bytes))
33 }
34
35 pub fn to_vec(self) -> Vec<u8> {
37 self.0.to_vec()
38 }
39
40 pub fn builder() -> ChunkBuilder {
42 ChunkBuilder::default()
43 }
44}
45
46impl AsRef<[u8]> for Chunk {
47 fn as_ref(&self) -> &[u8] {
48 self.0.as_ref()
49 }
50}
51
52impl From<&[u8]> for Chunk {
53 fn from(value: &[u8]) -> Self {
54 Self(Bytes::copy_from_slice(value))
55 }
56}
57
58impl From<Vec<u8>> for Chunk {
59 fn from(value: Vec<u8>) -> Self {
60 Self(Bytes::from_owner(value))
61 }
62}
63
64impl From<bytes::Bytes> for Chunk {
65 fn from(value: bytes::Bytes) -> Self {
66 Self(value)
67 }
68}
69
70impl From<Chunk> for Vec<u8> {
71 fn from(value: Chunk) -> Self {
72 value.0.to_vec()
73 }
74}
75
76impl From<Chunk> for bytes::Bytes {
77 fn from(value: Chunk) -> Self {
78 value.0
79 }
80}