updatehub_package_schema/
tarball.rs1use crate::definitions::{Filesystem, TargetFormat, TargetType};
6use serde::Deserialize;
7use std::path::PathBuf;
8
9#[derive(Clone, Deserialize, PartialEq, Eq, Debug)]
10#[serde(rename_all = "kebab-case")]
11pub struct Tarball {
12 pub filename: String,
13 pub filesystem: Filesystem,
14 pub size: u64,
15 pub sha256sum: String,
16 #[serde(flatten)]
17 pub target: TargetType,
18 pub target_path: PathBuf,
19
20 #[serde(default)]
21 pub compressed: bool,
22 #[serde(default)]
23 pub required_uncompressed_size: u64,
24 #[serde(flatten, default)]
25 pub target_format: TargetFormat,
26 #[serde(default)]
27 pub mount_options: String,
28}
29
30#[test]
31fn deserialize() {
32 use pretty_assertions::assert_eq;
33 use serde_json::json;
34
35 assert_eq!(
36 super::Object::Tarball(Box::new(Tarball {
37 filename: "etc/passwd".to_string(),
38 filesystem: Filesystem::Ext4,
39 size: 1024,
40 sha256sum: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
41 .to_string(),
42 target: TargetType::Device(std::path::PathBuf::from("/dev/sda")),
43 target_path: PathBuf::from("/"),
44
45 compressed: false,
46 required_uncompressed_size: 0,
47 target_format: TargetFormat::default(),
48 mount_options: String::default(),
49 })),
50 serde_json::from_value::<super::Object>(json!({
51 "mode": "tarball",
52 "filename": "etc/passwd",
53 "size": 1024,
54 "sha256sum": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
55 "target-type": "device",
56 "target": "/dev/sda",
57 "filesystem": "ext4",
58 "target-path": "/"
59 }))
60 .unwrap()
61 );
62}