keepass_ng/db/types/
meta.rs1use chrono::NaiveDateTime;
2use indexmap::IndexMap;
3use uuid::Uuid;
4
5use crate::db::{Color, CustomDataItem, CustomIcon};
6
7#[derive(Debug, Default, Eq, PartialEq, Clone)]
9#[cfg_attr(feature = "serialization", derive(serde::Serialize))]
10pub struct Meta {
11 pub generator: Option<String>,
13
14 pub database_name: Option<String>,
16
17 pub database_name_changed: Option<NaiveDateTime>,
19
20 pub database_description: Option<String>,
22
23 pub database_description_changed: Option<NaiveDateTime>,
25
26 pub(crate) custom_icons: IndexMap<Uuid, CustomIcon>,
28
29 pub default_username: Option<String>,
31
32 pub default_username_changed: Option<NaiveDateTime>,
34
35 pub maintenance_history_days: Option<usize>,
37
38 pub color: Option<Color>,
40
41 pub master_key_changed: Option<NaiveDateTime>,
43
44 pub master_key_change_rec: Option<isize>,
45
46 pub master_key_change_force: Option<isize>,
47
48 pub memory_protection: Option<MemoryProtection>,
50
51 pub(crate) recyclebin_enabled: Option<bool>,
53
54 pub(crate) recyclebin_uuid: Option<Uuid>,
56
57 pub(crate) recyclebin_changed: Option<NaiveDateTime>,
59
60 pub entry_templates_group: Option<Uuid>,
62
63 pub entry_templates_group_changed: Option<NaiveDateTime>,
65
66 pub last_selected_group: Option<Uuid>,
68
69 pub last_top_visible_group: Option<Uuid>,
71
72 pub history_max_items: Option<isize>,
74
75 pub history_max_size: Option<isize>,
77
78 pub settings_changed: Option<NaiveDateTime>,
80
81 pub custom_data: IndexMap<String, CustomDataItem>,
83}
84
85impl Meta {
86 pub fn new() -> Self {
88 Self {
89 recyclebin_enabled: Some(true),
90 ..Meta::default()
91 }
92 }
93
94 pub fn custom_icon(&self, uuid: Uuid) -> Option<&CustomIcon> {
95 self.custom_icons.get(&uuid)
96 }
97
98 pub fn custom_icons(&self) -> impl Iterator<Item = (&Uuid, &CustomIcon)> {
99 self.custom_icons.iter()
100 }
101
102 pub fn insert_custom_icon(&mut self, icon: CustomIcon) -> Option<CustomIcon> {
103 self.custom_icons.insert(icon.id(), icon)
104 }
105
106 pub fn set_recycle_bin_enabled(&mut self, enabled: bool) {
108 self.recyclebin_enabled = Some(enabled);
109 self.set_recycle_bin_changed();
110 }
111
112 pub fn recycle_bin_enabled(&self) -> bool {
113 self.recyclebin_enabled.unwrap_or(false)
114 }
115
116 pub fn recycle_bin_changed(&self) -> Option<NaiveDateTime> {
117 self.recyclebin_changed
118 }
119
120 pub fn set_recycle_bin_changed(&mut self) {
122 let time = chrono::Local::now().naive_local();
123 self.recyclebin_changed = Some(time);
124 }
125}
126
127#[derive(Debug, PartialEq, Eq, Clone)]
129#[cfg_attr(feature = "serialization", derive(serde::Serialize))]
130pub struct MemoryProtection {
131 pub protect_title: bool,
133
134 pub protect_username: bool,
136
137 pub protect_password: bool,
139
140 pub protect_url: bool,
142
143 pub protect_notes: bool,
145}
146
147impl Default for MemoryProtection {
148 fn default() -> Self {
149 Self {
150 protect_title: false,
151 protect_username: false,
152 protect_password: true,
153 protect_url: false,
154 protect_notes: false,
155 }
156 }
157}