1pub trait Paint {
2 fn red(&self) -> String;
3 fn green(&self) -> String;
4 fn yellow(&self) -> String;
5 fn blue(&self) -> String;
6 fn magenta(&self) -> String;
7 fn cyan(&self) -> String;
8 fn white(&self) -> String;
9 fn gray(&self) -> String;
10 fn bright_red(&self) -> String;
11 fn bright_green(&self) -> String;
12 fn bright_yellow(&self) -> String;
13 fn bright_blue(&self) -> String;
14 fn bright_magenta(&self) -> String;
15 fn bright_cyan(&self) -> String;
16 fn bright_white(&self) -> String;
17
18 fn underline(&self) -> String;
19 fn bold(&self) -> String;
20 fn italic(&self) -> String;
21 fn strikethrough(&self) -> String;
22
23 fn black_bg(&self) -> String;
24 fn red_bg(&self) -> String;
25 fn green_bg(&self) -> String;
26 fn yellow_bg(&self) -> String;
27 fn blue_bg(&self) -> String;
28 fn magenta_bg(&self) -> String;
29 fn cyan_bg(&self) -> String;
30 fn white_bg(&self) -> String;
31 fn gray_bg(&self) -> String;
32 fn bright_red_bg(&self) -> String;
33 fn bright_green_bg(&self) -> String;
34 fn bright_yellow_bg(&self) -> String;
35 fn bright_blue_bg(&self) -> String;
36 fn bright_magenta_bg(&self) -> String;
37 fn bright_cyan_bg(&self) -> String;
38 fn bright_white_bg(&self) -> String;
39 fn reset(&self) -> String;
40}
41
42impl Paint for String {
43 fn red(&self) -> String {
44 format!("\x1b[31m{}", self)
45 }
46
47 fn green(&self) -> String {
48 format!("\x1b[32m{}", self)
49 }
50
51 fn yellow(&self) -> String {
52 format!("\x1b[33m{}", self)
53 }
54
55 fn blue(&self) -> String {
56 format!("\x1b[34m{}", self)
57 }
58
59 fn magenta(&self) -> String {
60 format!("\x1b[35m{}", self)
61 }
62
63 fn cyan(&self) -> String {
64 format!("\x1b[36m{}", self)
65 }
66
67 fn white(&self) -> String {
68 format!("\x1b[37m{}", self)
69 }
70
71 fn gray(&self) -> String {
72 format!("\x1b[90m{}", self)
73 }
74
75 fn bright_red(&self) -> String {
76 format!("\x1b[91m{}", self)
77 }
78
79 fn bright_green(&self) -> String {
80 format!("\x1b[92m{}", self)
81 }
82
83 fn bright_yellow(&self) -> String {
84 format!("\x1b[93m{}", self)
85 }
86
87 fn bright_blue(&self) -> String {
88 format!("\x1b[94m{}", self)
89 }
90
91 fn bright_magenta(&self) -> String {
92 format!("\x1b[95m{}", self)
93 }
94
95 fn bright_cyan(&self) -> String {
96 format!("\x1b[96m{}", self)
97 }
98
99 fn bright_white(&self) -> String {
100 format!("\x1b[97m{}", self)
101 }
102
103 fn underline(&self) -> String {
104 format!("\x1b[4m{}", self)
105 }
106
107 fn bold(&self) -> String {
108 format!("\x1b[1m{}", self)
109 }
110
111 fn italic(&self) -> String {
112 format!("\x1b[3m{}", self)
113 }
114
115 fn strikethrough(&self) -> String {
116 format!("\x1b[9m{}", self)
117 }
118
119 fn black_bg(&self) -> String {
120 format!("\x1b[40m{}", self)
121 }
122
123 fn red_bg(&self) -> String {
124 format!("\x1b[41m{}", self)
125 }
126
127 fn green_bg(&self) -> String {
128 format!("\x1b[42m{}", self)
129 }
130
131 fn yellow_bg(&self) -> String {
132 format!("\x1b[43m{}", self)
133 }
134
135 fn blue_bg(&self) -> String {
136 format!("\x1b[44m{}", self)
137 }
138
139 fn magenta_bg(&self) -> String {
140 format!("\x1b[45m{}", self)
141 }
142
143 fn cyan_bg(&self) -> String {
144 format!("\x1b[46m{}", self)
145 }
146
147 fn white_bg(&self) -> String {
148 format!("\x1b[47m{}", self)
149 }
150
151 fn gray_bg(&self) -> String {
152 format!("\x1b[100m{}", self)
153 }
154
155 fn bright_red_bg(&self) -> String {
156 format!("\x1b[101m{}", self)
157 }
158
159 fn bright_green_bg(&self) -> String {
160 format!("\x1b[102m{}", self)
161 }
162
163 fn bright_yellow_bg(&self) -> String {
164 format!("\x1b[103m{}", self)
165 }
166
167 fn bright_blue_bg(&self) -> String {
168 format!("\x1b[104m{}", self)
169 }
170
171 fn bright_magenta_bg(&self) -> String {
172 format!("\x1b[105m{}", self)
173 }
174
175 fn bright_cyan_bg(&self) -> String {
176 format!("\x1b[106m{}", self)
177 }
178
179 fn bright_white_bg(&self) -> String {
180 format!("\x1b[107m{}", self)
181 }
182
183 fn reset(&self) -> String {
184 format!("\x1b[0m{}", self)
185 }
186}
187
188impl<'a> Paint for &'a str {
189 fn red(&self) -> String {
190 format!("\x1b[31m{}", self)
191 }
192
193 fn green(&self) -> String {
194 format!("\x1b[32m{}", self)
195 }
196
197 fn yellow(&self) -> String {
198 format!("\x1b[33m{}", self)
199 }
200
201 fn blue(&self) -> String {
202 format!("\x1b[34m{}", self)
203 }
204
205 fn magenta(&self) -> String {
206 format!("\x1b[35m{}", self)
207 }
208
209 fn cyan(&self) -> String {
210 format!("\x1b[36m{}", self)
211 }
212
213 fn white(&self) -> String {
214 format!("\x1b[37m{}", self)
215 }
216
217 fn gray(&self) -> String {
218 format!("\x1b[90m{}", self)
219 }
220
221 fn bright_red(&self) -> String {
222 format!("\x1b[91m{}", self)
223 }
224
225 fn bright_green(&self) -> String {
226 format!("\x1b[92m{}", self)
227 }
228
229 fn bright_yellow(&self) -> String {
230 format!("\x1b[93m{}", self)
231 }
232
233 fn bright_blue(&self) -> String {
234 format!("\x1b[94m{}", self)
235 }
236
237 fn bright_magenta(&self) -> String {
238 format!("\x1b[95m{}", self)
239 }
240
241 fn bright_cyan(&self) -> String {
242 format!("\x1b[96m{}", self)
243 }
244
245 fn bright_white(&self) -> String {
246 format!("\x1b[97m{}", self)
247 }
248
249 fn underline(&self) -> String {
250 format!("\x1b[4m{}", self)
251 }
252
253 fn bold(&self) -> String {
254 format!("\x1b[1m{}", self)
255 }
256
257 fn italic(&self) -> String {
258 format!("\x1b[3m{}", self)
259 }
260
261 fn strikethrough(&self) -> String {
262 format!("\x1b[9m{}", self)
263 }
264
265 fn black_bg(&self) -> String {
266 format!("\x1b[40m{}", self)
267 }
268
269 fn red_bg(&self) -> String {
270 format!("\x1b[41m{}", self)
271 }
272
273 fn green_bg(&self) -> String {
274 format!("\x1b[42m{}", self)
275 }
276
277 fn yellow_bg(&self) -> String {
278 format!("\x1b[43m{}", self)
279 }
280
281 fn blue_bg(&self) -> String {
282 format!("\x1b[44m{}", self)
283 }
284
285 fn magenta_bg(&self) -> String {
286 format!("\x1b[45m{}", self)
287 }
288
289 fn cyan_bg(&self) -> String {
290 format!("\x1b[46m{}", self)
291 }
292
293 fn white_bg(&self) -> String {
294 format!("\x1b[47m{}", self)
295 }
296
297 fn gray_bg(&self) -> String {
298 format!("\x1b[100m{}", self)
299 }
300
301 fn bright_red_bg(&self) -> String {
302 format!("\x1b[101m{}", self)
303 }
304
305 fn bright_green_bg(&self) -> String {
306 format!("\x1b[102m{}", self)
307 }
308
309 fn bright_yellow_bg(&self) -> String {
310 format!("\x1b[103m{}", self)
311 }
312
313 fn bright_blue_bg(&self) -> String {
314 format!("\x1b[104m{}", self)
315 }
316
317 fn bright_magenta_bg(&self) -> String {
318 format!("\x1b[105m{}", self)
319 }
320
321 fn bright_cyan_bg(&self) -> String {
322 format!("\x1b[106m{}", self)
323 }
324
325 fn bright_white_bg(&self) -> String {
326 format!("\x1b[107m{}", self)
327 }
328
329 fn reset(&self) -> String {
330 format!("\x1b[0m{}", self)
331 }
332}