updatehub_package_schema/
raw.rs1use crate::definitions::{ChunkSize, Count, InstallIfDifferent, Skip, TargetType, Truncate};
6use serde::Deserialize;
7
8#[derive(Clone, Deserialize, PartialEq, Eq, Debug)]
9#[serde(rename_all = "kebab-case")]
10pub struct Raw {
11 pub filename: String,
12 pub size: u64,
13 pub sha256sum: String,
14 #[serde(flatten)]
15 pub target_type: TargetType,
16
17 pub install_if_different: Option<InstallIfDifferent>,
18 #[serde(default)]
19 pub compressed: bool,
20 #[serde(default)]
21 pub required_uncompressed_size: u64,
22 #[serde(default)]
23 pub chunk_size: ChunkSize,
24 #[serde(default)]
25 pub skip: Skip,
26 #[serde(default)]
27 pub seek: u64,
28 #[serde(default)]
29 pub count: Count,
30 #[serde(default)]
31 pub truncate: Truncate,
32}
33
34#[test]
35fn deserialize() {
36 use pretty_assertions::assert_eq;
37 use serde_json::json;
38 use std::path::PathBuf;
39
40 assert_eq!(
41 super::Object::Raw(Box::new(Raw {
42 filename: "etc/passwd".to_string(),
43 size: 1024,
44 sha256sum: "cfe2be1c64b0387500853de0f48303e3de7b1c6f1508dc719eeafa0d41c36722"
45 .to_string(),
46 target_type: TargetType::Device(PathBuf::from("/dev/sdb")),
47
48 install_if_different: Some(InstallIfDifferent::CheckSum),
49 compressed: true,
50 required_uncompressed_size: 2048,
51 chunk_size: ChunkSize::default(),
52 skip: Skip::default(),
53 seek: u64::default(),
54 count: Count::default(),
55 truncate: Truncate::default(),
56 })),
57 serde_json::from_value::<super::Object>(json!({
58 "mode": "raw",
59 "filename": "etc/passwd",
60 "size": 1024,
61 "sha256sum": "cfe2be1c64b0387500853de0f48303e3de7b1c6f1508dc719eeafa0d41c36722",
62 "install-if-different": "sha256sum",
63 "target-type": "device",
64 "target": "/dev/sdb",
65 "compressed": true,
66 "required-uncompressed-size": 2048
67 }))
68 .unwrap()
69 );
70}