2025-07-21 22:02:05 +02:00
|
|
|
use diff::Diff;
|
|
|
|
|
use libips::actions::File;
|
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
|
use std::collections::HashMap;
|
|
|
|
|
|
|
|
|
|
#[derive(Serialize, Deserialize, Debug, Clone, Diff)]
|
|
|
|
|
#[diff(attr(
|
|
|
|
|
#[derive(Debug, PartialEq)]
|
|
|
|
|
))]
|
|
|
|
|
struct Manifest {
|
2025-07-29 11:38:36 +02:00
|
|
|
#[serde(skip_serializing_if = "HashMap::is_empty")]
|
2025-07-26 12:54:01 +02:00
|
|
|
files: HashMap<String, File>,
|
2025-07-21 22:02:05 +02:00
|
|
|
}
|
|
|
|
|
|
2024-08-15 21:27:00 +02:00
|
|
|
fn main() {
|
2025-07-26 12:54:01 +02:00
|
|
|
let base = Manifest {
|
|
|
|
|
files: HashMap::from([
|
|
|
|
|
(
|
|
|
|
|
"0dh5".to_string(),
|
|
|
|
|
File {
|
|
|
|
|
payload: None,
|
|
|
|
|
path: "var/file".to_string(),
|
|
|
|
|
group: "bin".to_string(),
|
|
|
|
|
owner: "root".to_string(),
|
|
|
|
|
mode: "0755".to_string(),
|
|
|
|
|
preserve: false,
|
|
|
|
|
overlay: false,
|
|
|
|
|
original_name: "".to_string(),
|
|
|
|
|
revert_tag: "".to_string(),
|
|
|
|
|
sys_attr: "".to_string(),
|
|
|
|
|
properties: vec![],
|
|
|
|
|
facets: Default::default(),
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"12ds3".to_string(),
|
|
|
|
|
File {
|
|
|
|
|
payload: None,
|
|
|
|
|
path: "var/file1".to_string(),
|
|
|
|
|
group: "bin".to_string(),
|
|
|
|
|
owner: "root".to_string(),
|
|
|
|
|
mode: "0755".to_string(),
|
|
|
|
|
preserve: false,
|
|
|
|
|
overlay: false,
|
|
|
|
|
original_name: "".to_string(),
|
|
|
|
|
revert_tag: "".to_string(),
|
|
|
|
|
sys_attr: "".to_string(),
|
|
|
|
|
properties: vec![],
|
|
|
|
|
facets: Default::default(),
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"654".to_string(),
|
|
|
|
|
File {
|
|
|
|
|
payload: None,
|
|
|
|
|
path: "var/file1".to_string(),
|
|
|
|
|
group: "bin".to_string(),
|
|
|
|
|
owner: "root".to_string(),
|
|
|
|
|
mode: "0755".to_string(),
|
|
|
|
|
preserve: false,
|
|
|
|
|
overlay: false,
|
|
|
|
|
original_name: "".to_string(),
|
|
|
|
|
revert_tag: "".to_string(),
|
|
|
|
|
sys_attr: "".to_string(),
|
|
|
|
|
properties: vec![],
|
|
|
|
|
facets: Default::default(),
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
]),
|
|
|
|
|
};
|
2024-08-15 21:27:00 +02:00
|
|
|
|
2025-07-26 12:54:01 +02:00
|
|
|
let new_set = Manifest {
|
|
|
|
|
files: HashMap::from([
|
|
|
|
|
(
|
|
|
|
|
"0dh5".to_string(),
|
|
|
|
|
File {
|
|
|
|
|
payload: None,
|
|
|
|
|
path: "var/file".to_string(),
|
|
|
|
|
group: "bin".to_string(),
|
|
|
|
|
owner: "root".to_string(),
|
|
|
|
|
mode: "0755".to_string(),
|
|
|
|
|
preserve: false,
|
|
|
|
|
overlay: false,
|
|
|
|
|
original_name: "".to_string(),
|
|
|
|
|
revert_tag: "".to_string(),
|
|
|
|
|
sys_attr: "".to_string(),
|
|
|
|
|
properties: vec![],
|
|
|
|
|
facets: Default::default(),
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
(
|
|
|
|
|
"654".to_string(),
|
|
|
|
|
File {
|
|
|
|
|
payload: None,
|
|
|
|
|
path: "var/file1".to_string(),
|
|
|
|
|
group: "bin".to_string(),
|
|
|
|
|
owner: "root".to_string(),
|
|
|
|
|
mode: "0755".to_string(),
|
|
|
|
|
preserve: false,
|
|
|
|
|
overlay: false,
|
|
|
|
|
original_name: "".to_string(),
|
|
|
|
|
revert_tag: "".to_string(),
|
|
|
|
|
sys_attr: "".to_string(),
|
|
|
|
|
properties: vec![],
|
|
|
|
|
facets: Default::default(),
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
]),
|
|
|
|
|
};
|
2025-07-21 22:02:05 +02:00
|
|
|
let d = base.diff(&new_set);
|
|
|
|
|
println!("{:#?}", d);
|
2024-08-15 21:27:00 +02:00
|
|
|
}
|