updatehub_package_schema/
tarball.rs

1// Copyright (C) 2019 O.S. Systems Sofware LTDA
2//
3// SPDX-License-Identifier: Apache-2.0
4
5use 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}