ant_protocol/storage/
chunks.rs1use super::ChunkAddress;
10use crate::NetworkAddress;
11use bytes::Bytes;
12use serde::{Deserialize, Deserializer, Serialize, Serializer};
13
14use xor_name::XorName;
15
16#[derive(Hash, Eq, PartialEq, PartialOrd, Ord, Clone, custom_debug::Debug)]
18pub struct Chunk {
19 pub address: ChunkAddress,
22 #[debug(skip)]
24 pub value: Bytes,
25}
26
27impl Chunk {
28 pub const DEFAULT_MAX_SIZE: usize = 1024 * 1024;
30
31 pub fn new(value: Bytes) -> Self {
33 Self {
34 address: ChunkAddress::new(XorName::from_content(value.as_ref())),
35 value,
36 }
37 }
38
39 pub fn value(&self) -> &Bytes {
41 &self.value
42 }
43
44 pub fn address(&self) -> &ChunkAddress {
46 &self.address
47 }
48
49 pub fn network_address(&self) -> NetworkAddress {
51 NetworkAddress::ChunkAddress(self.address)
52 }
53
54 pub fn name(&self) -> &XorName {
56 self.address.xorname()
57 }
58
59 pub fn size(&self) -> usize {
61 self.value.len()
62 }
63
64 pub fn is_too_big(&self) -> bool {
66 self.size() > Self::DEFAULT_MAX_SIZE
67 }
68}
69
70impl Serialize for Chunk {
71 fn serialize<S: Serializer>(&self, serialiser: S) -> Result<S::Ok, S::Error> {
72 self.value.serialize(serialiser)
74 }
75}
76
77impl<'de> Deserialize<'de> for Chunk {
78 fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
79 let value = Deserialize::deserialize(deserializer)?;
80 Ok(Self::new(value))
81 }
82}