keepass_ng/db/types/
iconid.rs1use std::convert::TryFrom;
2
3#[derive(Debug, Default, PartialEq, Eq, Clone, Copy, Hash)]
6#[cfg_attr(feature = "serialization", derive(serde::Serialize))]
7pub struct IconId(pub usize);
8
9const MAX_BUILTIN_ICON_COUNT: usize = 69;
10
11impl std::fmt::Display for IconId {
12 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13 #[rustfmt::skip]
14 const EMOJIS: [&str; MAX_BUILTIN_ICON_COUNT] = [
15 "đ", "đ", "â ī¸", "đĨī¸", "đ", "đŦ", "đ§", "đ", "đ", "đ",
16 "đ", "đˇ", "đĄ", "đ", "đ", "đą", "đ", "đŋ", "đĨī¸", "đ§",
17 "đ§", "đ", "đ", "đ¸", "âĄ", "đģ", "đž", "đ", "đī¸", "đ",
18 "đģ", "đ¨ī¸", "đŗ", "đ", "đ§", "đ", "đī¸", "đ¯", "đģ", "đ°ī¸",
19 "đ", "đī¸", "đž", "đī¸", "đ", "đ", "âšī¸", "đī¸", "đ", "đ",
20 "đĨī¸", "đ", "đ", "â
", "đī¸", "đˇ", "đĨ", "đ", "đ", "đ§",
21 "đ ", "â", "đ§", "đ¤", "đ", "đ", "đĩ", "đ", "đą",
22 ];
23
24 let emoji = EMOJIS.get(self.0).unwrap_or(&"");
25 write!(f, "{emoji}")
26 }
27}
28
29impl IconId {
30 pub const KEY: IconId = IconId(0);
31 pub const WORLD: IconId = IconId(1);
32 pub const WARNING: IconId = IconId(2);
33 pub const NETWORK_SERVER: IconId = IconId(3);
34 pub const MARKED_DIRECTORY: IconId = IconId(4);
35 pub const USER_COMMUNICATION: IconId = IconId(5);
36 pub const PARTS: IconId = IconId(6);
37 pub const NOTEPAD: IconId = IconId(7);
38 pub const WORLD_SOCKET: IconId = IconId(8);
39 pub const IDENTITY: IconId = IconId(9);
40 pub const PAPER_READY: IconId = IconId(10);
41 pub const DIGICAM: IconId = IconId(11);
42 pub const IRCOMMUNICATION: IconId = IconId(12);
43 pub const MULTI_KEYS: IconId = IconId(13);
44 pub const PLUG: IconId = IconId(14);
45 pub const PDA: IconId = IconId(15);
46 pub const BOOK_MARK: IconId = IconId(16);
47 pub const CD_ROM: IconId = IconId(17);
48 pub const MONITOR: IconId = IconId(18);
49 pub const EMAIL: IconId = IconId(19);
50 pub const CONFIG: IconId = IconId(20);
51 pub const CLIPBOARD_READY: IconId = IconId(21);
52 pub const PAPER_NEW: IconId = IconId(22);
53 pub const SCREENSHOT: IconId = IconId(23);
54 pub const THUNDER: IconId = IconId(24);
55 pub const RADIO: IconId = IconId(25);
56 pub const FLOPPY_DISK: IconId = IconId(26);
57 pub const FTP: IconId = IconId(27);
58 pub const FILM: IconId = IconId(28);
59 pub const SECURITY_TERMINAL: IconId = IconId(29);
60 pub const TERMINAL: IconId = IconId(30);
61 pub const PRINTER: IconId = IconId(31);
62 pub const GRID: IconId = IconId(32);
63 pub const CHECKER_BOARD: IconId = IconId(33);
64 pub const WRENCH: IconId = IconId(34);
65 pub const INTERNET: IconId = IconId(35);
66 pub const ZIP_FOLDER: IconId = IconId(36);
67 pub const PERCENT: IconId = IconId(37);
68 pub const WINDOWS_PC: IconId = IconId(38);
69 pub const CLOCK: IconId = IconId(39);
70 pub const SEARCH: IconId = IconId(40);
71 pub const LANDSCAPE: IconId = IconId(41);
72 pub const MEMORY: IconId = IconId(42);
73 pub const RECYCLE_BIN: IconId = IconId(43);
74 pub const CLIPBOARD: IconId = IconId(44);
75 pub const STOP: IconId = IconId(45);
76 pub const INFORMATION: IconId = IconId(46);
77 pub const FILING_CABINET: IconId = IconId(47);
78 pub const FOLDER: IconId = IconId(48);
79 pub const FOLDER_OPEN: IconId = IconId(49);
80 pub const DESKTOP: IconId = IconId(50);
81 pub const LOCK_OPEN: IconId = IconId(51);
82 pub const LOCKED: IconId = IconId(52);
83 pub const APPROVED: IconId = IconId(53);
84 pub const MARKER: IconId = IconId(54);
85 pub const PICTURE_DOC: IconId = IconId(55);
86 pub const CONTACT: IconId = IconId(56);
87 pub const EXCEL_SHEET: IconId = IconId(57);
88 pub const SECURIT_ACCOUNT: IconId = IconId(58);
89 pub const REPAIR: IconId = IconId(59);
90 pub const HOME: IconId = IconId(60);
91 pub const STAR: IconId = IconId(61);
92 pub const LINUX: IconId = IconId(62);
93 pub const ANDROID: IconId = IconId(63);
94 pub const APPLE: IconId = IconId(64);
95 pub const WIKIPEDIA: IconId = IconId(65);
96 pub const DOLLAR: IconId = IconId(66);
97 pub const CERTIFICATE: IconId = IconId(67);
98 pub const MOBILE_PHONE: IconId = IconId(68);
99}
100
101impl TryFrom<usize> for IconId {
102 type Error = crate::error::Error;
103 fn try_from(value: usize) -> Result<Self, Self::Error> {
104 if value >= MAX_BUILTIN_ICON_COUNT {
105 return Err(crate::error::Error::ParseIconIdError { icon_id: value });
106 }
107 Ok(Self(value))
108 }
109}
110
111impl From<IconId> for usize {
112 fn from(icon_id: IconId) -> Self {
113 icon_id.0
114 }
115}