pub struct DxfColor(pub u8, pub u8, pub u8);
impl From<u8> for DxfColor {
fn from(idx: u8) -> Self {
let rgb = match idx {
0 => (0, 0, 0),
1 => (255, 0, 0),
2 => (255, 255, 0),
3 => (0, 255, 0),
4 => (0, 255, 255),
5 => (0, 0, 255),
6 => (255, 0, 255),
7 => (255, 255, 255),
8 => (65, 65, 65),
9 => (128, 128, 128),
10 => (255, 0, 0),
11 => (255, 170, 170),
12 => (189, 0, 0),
13 => (189, 126, 126),
14 => (129, 0, 0),
15 => (129, 86, 86),
16 => (104, 0, 0),
17 => (104, 69, 69),
18 => (79, 0, 0),
19 => (79, 53, 53),
20 => (255, 63, 0),
21 => (255, 191, 170),
22 => (189, 46, 0),
23 => (189, 141, 126),
24 => (129, 31, 0),
25 => (129, 96, 86),
26 => (104, 25, 0),
27 => (104, 78, 69),
28 => (79, 19, 0),
29 => (79, 59, 53),
30 => (255, 127, 0),
31 => (255, 212, 170),
32 => (189, 94, 0),
33 => (189, 157, 126),
34 => (129, 64, 0),
35 => (129, 107, 86),
36 => (104, 52, 0),
37 => (104, 86, 69),
38 => (79, 39, 0),
39 => (79, 66, 53),
40 => (255, 191, 0),
41 => (255, 234, 170),
42 => (189, 141, 0),
43 => (189, 173, 126),
44 => (129, 96, 0),
45 => (129, 118, 86),
46 => (104, 78, 0),
47 => (104, 95, 69),
48 => (79, 59, 0),
49 => (79, 73, 53),
50 => (255, 255, 0),
51 => (255, 255, 170),
52 => (189, 189, 0),
53 => (189, 189, 126),
54 => (129, 129, 0),
55 => (129, 129, 86),
56 => (104, 104, 0),
57 => (104, 104, 69),
58 => (79, 79, 0),
59 => (79, 79, 53),
60 => (191, 255, 0),
61 => (234, 255, 170),
62 => (141, 189, 0),
63 => (173, 189, 126),
64 => (96, 129, 0),
65 => (118, 129, 86),
66 => (78, 104, 0),
67 => (95, 104, 69),
68 => (59, 79, 0),
69 => (73, 79, 53),
70 => (127, 255, 0),
71 => (212, 255, 170),
72 => (94, 189, 0),
73 => (157, 189, 126),
74 => (64, 129, 0),
75 => (107, 129, 86),
76 => (52, 104, 0),
77 => (86, 104, 69),
78 => (39, 79, 0),
79 => (66, 79, 53),
80 => (63, 255, 0),
81 => (191, 255, 170),
82 => (46, 189, 0),
83 => (141, 189, 126),
84 => (31, 129, 0),
85 => (96, 129, 86),
86 => (25, 104, 0),
87 => (78, 104, 69),
88 => (19, 79, 0),
89 => (59, 79, 53),
90 => (0, 255, 0),
91 => (170, 255, 170),
92 => (0, 189, 0),
93 => (126, 189, 126),
94 => (0, 129, 0),
95 => (86, 129, 86),
96 => (0, 104, 0),
97 => (69, 104, 69),
98 => (0, 79, 0),
99 => (53, 79, 53),
100 => (0, 255, 63),
101 => (170, 255, 191),
102 => (0, 189, 46),
103 => (126, 189, 141),
104 => (0, 129, 31),
105 => (86, 129, 96),
106 => (0, 104, 25),
107 => (69, 104, 78),
108 => (0, 79, 19),
109 => (53, 79, 59),
110 => (0, 255, 127),
111 => (170, 255, 212),
112 => (0, 189, 94),
113 => (126, 189, 157),
114 => (0, 129, 64),
115 => (86, 129, 107),
116 => (0, 104, 52),
117 => (69, 104, 86),
118 => (0, 79, 39),
119 => (53, 79, 66),
120 => (0, 255, 191),
121 => (170, 255, 234),
122 => (0, 189, 141),
123 => (126, 189, 173),
124 => (0, 129, 96),
125 => (86, 129, 118),
126 => (0, 104, 78),
127 => (69, 104, 95),
128 => (0, 79, 59),
129 => (53, 79, 73),
130 => (0, 255, 255),
131 => (170, 255, 255),
132 => (0, 189, 189),
133 => (126, 189, 189),
134 => (0, 129, 129),
135 => (86, 129, 129),
136 => (0, 104, 104),
137 => (69, 104, 104),
138 => (0, 79, 79),
139 => (53, 79, 79),
140 => (0, 191, 255),
141 => (170, 234, 255),
142 => (0, 141, 189),
143 => (126, 173, 189),
144 => (0, 96, 129),
145 => (86, 118, 129),
146 => (0, 78, 104),
147 => (69, 95, 104),
148 => (0, 59, 79),
149 => (53, 73, 79),
150 => (0, 127, 255),
151 => (170, 212, 255),
152 => (0, 94, 189),
153 => (126, 157, 189),
154 => (0, 64, 129),
155 => (86, 107, 129),
156 => (0, 52, 104),
157 => (69, 86, 104),
158 => (0, 39, 79),
159 => (53, 66, 79),
160 => (0, 63, 255),
161 => (170, 191, 255),
162 => (0, 46, 189),
163 => (126, 141, 189),
164 => (0, 31, 129),
165 => (86, 96, 129),
166 => (0, 25, 104),
167 => (69, 78, 104),
168 => (0, 19, 79),
169 => (53, 59, 79),
170 => (0, 0, 255),
171 => (170, 170, 255),
172 => (0, 0, 189),
173 => (126, 126, 189),
174 => (0, 0, 129),
175 => (86, 86, 129),
176 => (0, 0, 104),
177 => (69, 69, 104),
178 => (0, 0, 79),
179 => (53, 53, 79),
180 => (63, 0, 255),
181 => (191, 170, 255),
182 => (46, 0, 189),
183 => (141, 126, 189),
184 => (31, 0, 129),
185 => (96, 86, 129),
186 => (25, 0, 104),
187 => (78, 69, 104),
188 => (19, 0, 79),
189 => (59, 53, 79),
190 => (127, 0, 255),
191 => (212, 170, 255),
192 => (94, 0, 189),
193 => (157, 126, 189),
194 => (64, 0, 129),
195 => (107, 86, 129),
196 => (52, 0, 104),
197 => (86, 69, 104),
198 => (39, 0, 79),
199 => (66, 53, 79),
200 => (191, 0, 255),
201 => (234, 170, 255),
202 => (141, 0, 189),
203 => (173, 126, 189),
204 => (96, 0, 129),
205 => (118, 86, 129),
206 => (78, 0, 104),
207 => (95, 69, 104),
208 => (59, 0, 79),
209 => (73, 53, 79),
210 => (255, 0, 255),
211 => (255, 170, 255),
212 => (189, 0, 189),
213 => (189, 126, 189),
214 => (129, 0, 129),
215 => (129, 86, 129),
216 => (104, 0, 104),
217 => (104, 69, 104),
218 => (79, 0, 79),
219 => (79, 53, 79),
220 => (255, 0, 191),
221 => (255, 170, 234),
222 => (189, 0, 141),
223 => (189, 126, 173),
224 => (129, 0, 96),
225 => (129, 86, 118),
226 => (104, 0, 78),
227 => (104, 69, 95),
228 => (79, 0, 59),
229 => (79, 53, 73),
230 => (255, 0, 127),
231 => (255, 170, 212),
232 => (189, 0, 94),
233 => (189, 126, 157),
234 => (129, 0, 64),
235 => (129, 86, 107),
236 => (104, 0, 52),
237 => (104, 69, 86),
238 => (79, 0, 39),
239 => (79, 53, 66),
240 => (255, 0, 63),
241 => (255, 170, 191),
242 => (189, 0, 46),
243 => (189, 126, 141),
244 => (129, 0, 31),
245 => (129, 86, 96),
246 => (104, 0, 25),
247 => (104, 69, 78),
248 => (79, 0, 19),
249 => (79, 53, 59),
250 => (51, 51, 51),
251 => (80, 80, 80),
252 => (105, 105, 105),
253 => (130, 130, 130),
254 => (190, 190, 190),
255 => (255, 255, 255),
};
DxfColor(rgb.0, rgb.1, rgb.2)
}
}
impl DxfColor {
pub fn as_hex(&self) -> String {
format!("{:0>2X}{:0>2X}{:0>2X}", self.0, self.1, self.2)
}
}
#[cfg(test)]
mod tests {
use super::DxfColor;
#[test]
fn as_hex() {
assert_eq!(DxfColor::from(0).as_hex(), "000000");
assert_eq!(DxfColor::from(1).as_hex(), "FF0000");
assert_eq!(DxfColor::from(2).as_hex(), "FFFF00");
}
}