updatehub_package_schema/definitions/
chunk_size.rs1use serde::{Deserialize, Deserializer, de};
6
7#[derive(Clone, PartialEq, Eq, Debug)]
10pub struct ChunkSize(pub usize);
11
12impl Default for ChunkSize {
13 fn default() -> Self {
14 ChunkSize(131_072)
15 }
16}
17
18impl<'de> Deserialize<'de> for ChunkSize {
19 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
20 where
21 D: Deserializer<'de>,
22 {
23 let n = usize::deserialize(deserializer)?;
24 if n > 1 {
25 return Ok(ChunkSize(n));
26 }
27 Err(de::Error::custom(format!("Invalid chunk size: {n}")))
28 }
29}
30
31#[cfg(test)]
32mod test {
33 use super::*;
34 use pretty_assertions::assert_eq;
35 use serde_json::json;
36
37 #[derive(Debug, PartialEq, Eq, Deserialize)]
38 struct Payload {
39 #[serde(default)]
40 chunk_size: ChunkSize,
41 }
42
43 #[test]
44 fn deserialize() {
45 assert_eq!(
46 serde_json::from_value::<Payload>(json!({ "chunk_size": 313 })).ok(),
47 Some(Payload { chunk_size: ChunkSize(313) })
48 );
49 assert!(serde_json::from_value::<Payload>(json!({ "chunk_size": 0 })).is_err());
50 }
51
52 #[test]
53 fn default() {
54 assert_eq!(
55 serde_json::from_value::<Payload>(json!({})).ok(),
56 Some(Payload { chunk_size: ChunkSize(131_072) })
57 );
58 }
59}