1use 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
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}