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 fn count() -> usize {
31 MAX_BUILTIN_ICON_COUNT
32 }
33
34 pub const KEY: IconId = IconId(0);
35 pub const WORLD: IconId = IconId(1);
36 pub const WARNING: IconId = IconId(2);
37 pub const NETWORK_SERVER: IconId = IconId(3);
38 pub const MARKED_DIRECTORY: IconId = IconId(4);
39 pub const USER_COMMUNICATION: IconId = IconId(5);
40 pub const PARTS: IconId = IconId(6);
41 pub const NOTEPAD: IconId = IconId(7);
42 pub const WORLD_SOCKET: IconId = IconId(8);
43 pub const IDENTITY: IconId = IconId(9);
44 pub const PAPER_READY: IconId = IconId(10);
45 pub const DIGICAM: IconId = IconId(11);
46 pub const IRCOMMUNICATION: IconId = IconId(12);
47 pub const MULTI_KEYS: IconId = IconId(13);
48 pub const PLUG: IconId = IconId(14);
49 pub const PDA: IconId = IconId(15);
50 pub const BOOK_MARK: IconId = IconId(16);
51 pub const CD_ROM: IconId = IconId(17);
52 pub const MONITOR: IconId = IconId(18);
53 pub const EMAIL: IconId = IconId(19);
54 pub const CONFIG: IconId = IconId(20);
55 pub const CLIPBOARD_READY: IconId = IconId(21);
56 pub const PAPER_NEW: IconId = IconId(22);
57 pub const SCREENSHOT: IconId = IconId(23);
58 pub const THUNDER: IconId = IconId(24);
59 pub const RADIO: IconId = IconId(25);
60 pub const FLOPPY_DISK: IconId = IconId(26);
61 pub const FTP: IconId = IconId(27);
62 pub const FILM: IconId = IconId(28);
63 pub const SECURITY_TERMINAL: IconId = IconId(29);
64 pub const TERMINAL: IconId = IconId(30);
65 pub const PRINTER: IconId = IconId(31);
66 pub const GRID: IconId = IconId(32);
67 pub const CHECKER_BOARD: IconId = IconId(33);
68 pub const WRENCH: IconId = IconId(34);
69 pub const INTERNET: IconId = IconId(35);
70 pub const ZIP_FOLDER: IconId = IconId(36);
71 pub const PERCENT: IconId = IconId(37);
72 pub const WINDOWS_PC: IconId = IconId(38);
73 pub const CLOCK: IconId = IconId(39);
74 pub const SEARCH: IconId = IconId(40);
75 pub const LANDSCAPE: IconId = IconId(41);
76 pub const MEMORY: IconId = IconId(42);
77 pub const RECYCLE_BIN: IconId = IconId(43);
78 pub const CLIPBOARD: IconId = IconId(44);
79 pub const STOP: IconId = IconId(45);
80 pub const INFORMATION: IconId = IconId(46);
81 pub const FILING_CABINET: IconId = IconId(47);
82 pub const FOLDER: IconId = IconId(48);
83 pub const FOLDER_OPEN: IconId = IconId(49);
84 pub const DESKTOP: IconId = IconId(50);
85 pub const LOCK_OPEN: IconId = IconId(51);
86 pub const LOCKED: IconId = IconId(52);
87 pub const APPROVED: IconId = IconId(53);
88 pub const MARKER: IconId = IconId(54);
89 pub const PICTURE_DOC: IconId = IconId(55);
90 pub const CONTACT: IconId = IconId(56);
91 pub const EXCEL_SHEET: IconId = IconId(57);
92 pub const SECURIT_ACCOUNT: IconId = IconId(58);
93 pub const REPAIR: IconId = IconId(59);
94 pub const HOME: IconId = IconId(60);
95 pub const STAR: IconId = IconId(61);
96 pub const LINUX: IconId = IconId(62);
97 pub const ANDROID: IconId = IconId(63);
98 pub const APPLE: IconId = IconId(64);
99 pub const WIKIPEDIA: IconId = IconId(65);
100 pub const DOLLAR: IconId = IconId(66);
101 pub const CERTIFICATE: IconId = IconId(67);
102 pub const MOBILE_PHONE: IconId = IconId(68);
103}
104
105impl TryFrom<usize> for IconId {
106 type Error = crate::error::Error;
107 fn try_from(value: usize) -> Result<Self, Self::Error> {
108 if value >= MAX_BUILTIN_ICON_COUNT {
109 return Err(crate::error::Error::ParseIconIdError { icon_id: value });
110 }
111 Ok(Self(value))
112 }
113}
114
115impl From<IconId> for usize {
116 fn from(icon_id: IconId) -> Self {
117 icon_id.0
118 }
119}