Skip to main content

keepass_ng/db/types/
icon.rs

1use chrono::NaiveDateTime;
2use std::ops::{Deref, DerefMut};
3use uuid::Uuid;
4
5use crate::db::IconId;
6
7/// Icon specification for an [Entry][crate::db::Entry] or [Group][crate::db::Group].
8#[derive(Debug, Eq, PartialEq, Clone)]
9#[cfg_attr(feature = "serialization", derive(serde::Serialize))]
10pub enum Icon {
11    /// The icon is a built-in icon specified by an index
12    BuiltIn(IconId),
13
14    /// The icon is a custom icon specified by a UUID
15    Custom(Uuid),
16}
17
18/// A custom icon stored in the database, containing raw image data.
19#[derive(Debug, Clone, PartialEq, Eq)]
20#[cfg_attr(feature = "serialization", derive(serde::Serialize))]
21pub struct CustomIcon {
22    pub(crate) id: Uuid,
23
24    /// Filename for the icon
25    pub name: Option<String>,
26
27    /// Last modification timestamp
28    pub last_modification_time: Option<NaiveDateTime>,
29
30    /// The raw image data
31    pub data: Vec<u8>,
32}
33
34impl CustomIcon {
35    /// Get the ID of this custom icon
36    pub fn id(&self) -> Uuid {
37        self.id
38    }
39
40    pub fn new(id: Uuid, name: Option<String>, last_modification_time: Option<NaiveDateTime>, data: Vec<u8>) -> Self {
41        Self {
42            id,
43            name,
44            last_modification_time,
45            data,
46        }
47    }
48}
49
50impl Deref for CustomIcon {
51    type Target = Vec<u8>;
52    fn deref(&self) -> &Self::Target {
53        &self.data
54    }
55}
56
57impl DerefMut for CustomIcon {
58    fn deref_mut(&mut self) -> &mut Self::Target {
59        &mut self.data
60    }
61}