Skip to main content

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