use super::binaries_map::BinariesMap;
use super::color::Color;
use super::custom_data_map::CustomDataMap;
use super::custom_icons_map::CustomIconsMap;
use super::group::Group;
use super::group_uuid::GroupUuid;
use super::header_hash::HeaderHash;
use crate::common;
use chrono::{DateTime, Utc};
#[derive(Clone, Debug, PartialEq)]
pub struct XmlData {
pub binaries: BinariesMap,
pub color: Option<Color>,
pub custom_data: CustomDataMap,
pub custom_icons: CustomIconsMap,
pub def_username: String,
pub def_username_changed: DateTime<Utc>,
pub description: String,
pub description_changed: DateTime<Utc>,
pub entry_templates_group_changed: DateTime<Utc>,
pub entry_templates_group_uuid: GroupUuid,
pub generator: String,
pub header_hash: Option<HeaderHash>,
pub history_max_items: i32,
pub history_max_size: i32,
pub last_selected_group: GroupUuid,
pub last_top_visible_group: GroupUuid,
pub maintenance_history_days: i32,
pub master_key_change_force: i32,
pub master_key_change_rec: i32,
pub master_key_changed: DateTime<Utc>,
pub name: String,
pub name_changed: DateTime<Utc>,
pub protect_notes: bool,
pub protect_password: bool,
pub protect_title: bool,
pub protect_url: bool,
pub protect_username: bool,
pub recycle_bin_changed: DateTime<Utc>,
pub recycle_bin_enabled: bool,
pub recycle_bin_uuid: GroupUuid,
pub root_group: Option<Group>,
}
impl Default for XmlData {
fn default() -> XmlData {
let now = Utc::now();
XmlData {
binaries: BinariesMap::new(),
color: None,
custom_data: CustomDataMap::new(),
custom_icons: CustomIconsMap::new(),
def_username: String::new(),
def_username_changed: now,
description: String::new(),
description_changed: now,
entry_templates_group_changed: now,
entry_templates_group_uuid: GroupUuid::nil(),
generator: String::new(),
header_hash: None,
history_max_items: common::HISTORY_MAX_ITEMS_DEFAULT,
history_max_size: common::HISTORY_MAX_SIZE_DEFAULT,
last_selected_group: GroupUuid::nil(),
last_top_visible_group: GroupUuid::nil(),
maintenance_history_days: common::MAINTENANCE_HISTORY_DAYS_DEFAULT,
master_key_change_force: common::MASTER_KEY_CHANGE_FORCE_DEFAULT,
master_key_change_rec: common::MASTER_KEY_CHANGE_REC_DEFAULT,
master_key_changed: now,
name: String::new(),
name_changed: now,
protect_notes: common::PROTECT_NOTES_DEFAULT,
protect_password: common::PROTECT_PASSWORD_DEFAULT,
protect_title: common::PROTECT_TITLE_DEFAULT,
protect_url: common::PROTECT_URL_DEFAULT,
protect_username: common::PROTECT_USERNAME_DEFAULT,
recycle_bin_changed: now,
recycle_bin_enabled: common::RECYCLE_BIN_ENABLED_DEFAULT,
recycle_bin_uuid: GroupUuid::nil(),
root_group: None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::types::BinariesMap;
use crate::types::CustomDataMap;
use crate::types::CustomIconsMap;
use crate::types::GroupUuid;
use crate::utils::test::approx_equal_datetime;
use chrono::Utc;
#[test]
fn test_default_returns_correct_instance() {
let now = Utc::now();
let data = XmlData::default();
assert_eq!(data.binaries, BinariesMap::new());
assert_eq!(data.color, None);
assert_eq!(data.custom_data, CustomDataMap::new());
assert_eq!(data.custom_icons, CustomIconsMap::new());
assert_eq!(data.def_username, "");
assert!(approx_equal_datetime(data.def_username_changed, now));
assert_eq!(data.description, "");
assert!(approx_equal_datetime(data.description_changed, now));
assert!(approx_equal_datetime(data.entry_templates_group_changed, now));
assert_eq!(data.entry_templates_group_uuid, GroupUuid::nil());
assert_eq!(data.generator, "");
assert_eq!(data.header_hash, None);
assert_eq!(data.history_max_items, 10);
assert_eq!(data.history_max_size, 6291456);
assert_eq!(data.last_selected_group, GroupUuid::nil());
assert_eq!(data.last_top_visible_group, GroupUuid::nil());
assert_eq!(data.maintenance_history_days, 365);
assert_eq!(data.master_key_change_force, -1);
assert_eq!(data.master_key_change_rec, -1);
assert!(approx_equal_datetime(data.master_key_changed, now));
assert_eq!(data.name, "");
assert!(approx_equal_datetime(data.name_changed, now));
assert_eq!(data.protect_notes, false);
assert_eq!(data.protect_password, true);
assert_eq!(data.protect_title, false);
assert_eq!(data.protect_url, false);
assert_eq!(data.protect_username, false);
assert!(approx_equal_datetime(data.recycle_bin_changed, now));
assert_eq!(data.recycle_bin_enabled, true);
assert_eq!(data.recycle_bin_uuid, GroupUuid::nil());
assert_eq!(data.root_group, None);
}
}