keepass_ng/db/
iconid.rs

1use std::convert::TryFrom;
2
3/// IconId is a usize that represents an icon in the database
4/// The value is the index of the icon in the database's icon list
5#[derive(Debug, Default, PartialEq, Eq, Clone, Copy, Hash)]
6#[cfg_attr(feature = "serialization", derive(serde::Serialize))]
7pub struct IconId(pub usize);
8
9impl std::fmt::Display for IconId {
10    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
11        const EMOJIS: [&str; 69] = [
12            "🔑", "🌍", "âš ī¸", "đŸ–Ĩī¸", "📁", "đŸ’Ŧ", "🔧", "📝", "🌐", "🆔", "📄", "📷", "📡", "🔑", "🔌", "📱", "🔖", "đŸ’ŋ", "đŸ–Ĩī¸", "📧", "🔧",
13            "📋", "🆕", "📸", "⚡", "đŸ“ģ", "💾", "🌐", "đŸŽžī¸", "🔒", "đŸ’ģ", "đŸ–¨ī¸", "đŸ”ŗ", "🏁", "🔧", "🌐", "đŸ—œī¸", "đŸ’¯", "đŸ’ģ", "đŸ•°ī¸", "🔍", "đŸžī¸",
14            "💾", "đŸ—‘ī¸", "📋", "🛑", "â„šī¸", "đŸ—„ī¸", "📁", "📂", "đŸ–Ĩī¸", "🔓", "🔒", "✅", "đŸ–Šī¸", "📷", "đŸ‘Ĩ", "📊", "🔒", "🔧", "🏠", "⭐", "🐧",
15            "🤖", "🍎", "🌐", "đŸ’ĩ", "📜", "📱",
16        ];
17
18        let emoji = EMOJIS.get(self.0).unwrap_or(&"");
19        write!(f, "{}", emoji)
20    }
21}
22
23impl IconId {
24    pub const KEY: IconId = IconId(0);
25    pub const WORLD: IconId = IconId(1);
26    pub const WARNING: IconId = IconId(2);
27    pub const NETWORK_SERVER: IconId = IconId(3);
28    pub const MARKED_DIRECTORY: IconId = IconId(4);
29    pub const USER_COMMUNICATION: IconId = IconId(5);
30    pub const PARTS: IconId = IconId(6);
31    pub const NOTEPAD: IconId = IconId(7);
32    pub const WORLD_SOCKET: IconId = IconId(8);
33    pub const IDENTITY: IconId = IconId(9);
34    pub const PAPER_READY: IconId = IconId(10);
35    pub const DIGICAM: IconId = IconId(11);
36    pub const IRCOMMUNICATION: IconId = IconId(12);
37    pub const MULTI_KEYS: IconId = IconId(13);
38    pub const PLUG: IconId = IconId(14);
39    pub const PDA: IconId = IconId(15);
40    pub const BOOK_MARK: IconId = IconId(16);
41    pub const CD_ROM: IconId = IconId(17);
42    pub const MONITOR: IconId = IconId(18);
43    pub const EMAIL: IconId = IconId(19);
44    pub const CONFIG: IconId = IconId(20);
45    pub const CLIPBOARD_READY: IconId = IconId(21);
46    pub const PAPER_NEW: IconId = IconId(22);
47    pub const SCREENSHOT: IconId = IconId(23);
48    pub const THUNDER: IconId = IconId(24);
49    pub const RADIO: IconId = IconId(25);
50    pub const FLOPPY_DISK: IconId = IconId(26);
51    pub const FTP: IconId = IconId(27);
52    pub const FILM: IconId = IconId(28);
53    pub const SECURITY_TERMINAL: IconId = IconId(29);
54    pub const TERMINAL: IconId = IconId(30);
55    pub const PRINTER: IconId = IconId(31);
56    pub const GRID: IconId = IconId(32);
57    pub const CHECKER_BOARD: IconId = IconId(33);
58    pub const WRENCH: IconId = IconId(34);
59    pub const INTERNET: IconId = IconId(35);
60    pub const ZIP_FOLDER: IconId = IconId(36);
61    pub const PERCENT: IconId = IconId(37);
62    pub const WINDOWS_PC: IconId = IconId(38);
63    pub const CLOCK: IconId = IconId(39);
64    pub const SEARCH: IconId = IconId(40);
65    pub const LANDSCAPE: IconId = IconId(41);
66    pub const MEMORY: IconId = IconId(42);
67    pub const RECYCLE_BIN: IconId = IconId(43);
68    pub const CLIPBOARD: IconId = IconId(44);
69    pub const STOP: IconId = IconId(45);
70    pub const INFORMATION: IconId = IconId(46);
71    pub const FILING_CABINET: IconId = IconId(47);
72    pub const FOLDER: IconId = IconId(48);
73    pub const FOLDER_OPEN: IconId = IconId(49);
74    pub const DESKTOP: IconId = IconId(50);
75    pub const LOCK_OPEN: IconId = IconId(51);
76    pub const LOCKED: IconId = IconId(52);
77    pub const APPROVED: IconId = IconId(53);
78    pub const MARKER: IconId = IconId(54);
79    pub const PICTURE_DOC: IconId = IconId(55);
80    pub const CONTACT: IconId = IconId(56);
81    pub const EXCEL_SHEET: IconId = IconId(57);
82    pub const SECURIT_ACCOUNT: IconId = IconId(58);
83    pub const REPAIR: IconId = IconId(59);
84    pub const HOME: IconId = IconId(60);
85    pub const STAR: IconId = IconId(61);
86    pub const LINUX: IconId = IconId(62);
87    pub const ANDROID: IconId = IconId(63);
88    pub const APPLE: IconId = IconId(64);
89    pub const WIKIPEDIA: IconId = IconId(65);
90    pub const DOLLAR: IconId = IconId(66);
91    pub const CERTIFICATE: IconId = IconId(67);
92    pub const MOBILE_PHONE: IconId = IconId(68);
93}
94
95impl TryFrom<usize> for IconId {
96    type Error = crate::error::Error;
97    fn try_from(value: usize) -> Result<Self, Self::Error> {
98        if value > 68 {
99            return Err(crate::error::Error::ParseIconIdError { icon_id: value });
100        }
101        Ok(Self(value))
102    }
103}
104
105impl From<IconId> for usize {
106    fn from(icon_id: IconId) -> Self {
107        icon_id.0
108    }
109}