yore/code_pages/
cp866.rs

1//! Code autogenerated from <https://unicode.org/Public/MAPPINGS/VENDORS/>
2//! See binary codegen crate
3use std::borrow::Cow;
4use crate::{
5    decoder::{self, complete::decode_helper, UTF8Entry, UTF8Len},
6    encoder::Encoder, CodePage, DecodeError, EncodeError,
7};
8#[derive(Copy, Clone)]
9pub struct CP866;
10impl CP866 {
11    /// Decode CP866 byte-encoding into UTF-8 string
12    ///
13    /// # Examples
14    ///
15    /// ```
16    /// use yore::code_pages::CP866;
17    ///
18    /// assert_eq!(CP866.decode(&[116, 101, 120, 116]), "text");
19    /// ```
20    #[inline(always)]
21    pub fn decode(self, bytes: &[u8]) -> Cow<str> {
22        decode_helper(&DECODE_TABLE, bytes)
23    }
24    /// Encode UTF-8 string into CP866 byte-encoding
25    ///
26    /// Undefined characters will result in [`EncodeError`]
27    ///
28    /// # Examples
29    ///
30    /// ```
31    /// use yore::code_pages::CP866;
32    /// use yore::EncodeError;
33    ///
34    /// assert_eq!(CP866.encode("text").unwrap(), vec![116, 101, 120, 116]);
35    /// assert!(matches!(CP866.encode("text 🦀"), EncodeError));
36    /// ```
37    #[inline(always)]
38    pub fn encode(self, s: &str) -> Result<Cow<[u8]>, EncodeError> {
39        self.encode_helper(s, None)
40    }
41    /// Encode UTF-8 string into CP866 byte-encoding
42    ///
43    /// Undefined characters will be replaced with byte `fallback`
44    ///
45    /// # Examples
46    ///
47    /// ```
48    /// use yore::code_pages::CP866;
49    ///
50    /// assert_eq!(CP866.encode_lossy("text 🦀", 168), vec![116, 101, 120, 116, 32, 168]);
51    /// ```
52    #[inline(always)]
53    pub fn encode_lossy(self, s: &str, fallback: u8) -> Cow<[u8]> {
54        self.encode_helper(s, Some(fallback)).unwrap()
55    }
56}
57impl CodePage for CP866 {
58    #[inline(always)]
59    fn decode<'a>(&self, bytes: &'a [u8]) -> Result<Cow<'a, str>, DecodeError> {
60        Ok((*self).decode(bytes))
61    }
62}
63const DECODE_TABLE: decoder::complete::Table = [
64    UTF8Entry {
65        buf: [0x0, 0x0, 0x0],
66        len: UTF8Len::One,
67    },
68    UTF8Entry {
69        buf: [0x1, 0x0, 0x0],
70        len: UTF8Len::One,
71    },
72    UTF8Entry {
73        buf: [0x2, 0x0, 0x0],
74        len: UTF8Len::One,
75    },
76    UTF8Entry {
77        buf: [0x3, 0x0, 0x0],
78        len: UTF8Len::One,
79    },
80    UTF8Entry {
81        buf: [0x4, 0x0, 0x0],
82        len: UTF8Len::One,
83    },
84    UTF8Entry {
85        buf: [0x5, 0x0, 0x0],
86        len: UTF8Len::One,
87    },
88    UTF8Entry {
89        buf: [0x6, 0x0, 0x0],
90        len: UTF8Len::One,
91    },
92    UTF8Entry {
93        buf: [0x7, 0x0, 0x0],
94        len: UTF8Len::One,
95    },
96    UTF8Entry {
97        buf: [0x8, 0x0, 0x0],
98        len: UTF8Len::One,
99    },
100    UTF8Entry {
101        buf: [0x9, 0x0, 0x0],
102        len: UTF8Len::One,
103    },
104    UTF8Entry {
105        buf: [0xA, 0x0, 0x0],
106        len: UTF8Len::One,
107    },
108    UTF8Entry {
109        buf: [0xB, 0x0, 0x0],
110        len: UTF8Len::One,
111    },
112    UTF8Entry {
113        buf: [0xC, 0x0, 0x0],
114        len: UTF8Len::One,
115    },
116    UTF8Entry {
117        buf: [0xD, 0x0, 0x0],
118        len: UTF8Len::One,
119    },
120    UTF8Entry {
121        buf: [0xE, 0x0, 0x0],
122        len: UTF8Len::One,
123    },
124    UTF8Entry {
125        buf: [0xF, 0x0, 0x0],
126        len: UTF8Len::One,
127    },
128    UTF8Entry {
129        buf: [0x10, 0x0, 0x0],
130        len: UTF8Len::One,
131    },
132    UTF8Entry {
133        buf: [0x11, 0x0, 0x0],
134        len: UTF8Len::One,
135    },
136    UTF8Entry {
137        buf: [0x12, 0x0, 0x0],
138        len: UTF8Len::One,
139    },
140    UTF8Entry {
141        buf: [0x13, 0x0, 0x0],
142        len: UTF8Len::One,
143    },
144    UTF8Entry {
145        buf: [0x14, 0x0, 0x0],
146        len: UTF8Len::One,
147    },
148    UTF8Entry {
149        buf: [0x15, 0x0, 0x0],
150        len: UTF8Len::One,
151    },
152    UTF8Entry {
153        buf: [0x16, 0x0, 0x0],
154        len: UTF8Len::One,
155    },
156    UTF8Entry {
157        buf: [0x17, 0x0, 0x0],
158        len: UTF8Len::One,
159    },
160    UTF8Entry {
161        buf: [0x18, 0x0, 0x0],
162        len: UTF8Len::One,
163    },
164    UTF8Entry {
165        buf: [0x19, 0x0, 0x0],
166        len: UTF8Len::One,
167    },
168    UTF8Entry {
169        buf: [0x1A, 0x0, 0x0],
170        len: UTF8Len::One,
171    },
172    UTF8Entry {
173        buf: [0x1B, 0x0, 0x0],
174        len: UTF8Len::One,
175    },
176    UTF8Entry {
177        buf: [0x1C, 0x0, 0x0],
178        len: UTF8Len::One,
179    },
180    UTF8Entry {
181        buf: [0x1D, 0x0, 0x0],
182        len: UTF8Len::One,
183    },
184    UTF8Entry {
185        buf: [0x1E, 0x0, 0x0],
186        len: UTF8Len::One,
187    },
188    UTF8Entry {
189        buf: [0x1F, 0x0, 0x0],
190        len: UTF8Len::One,
191    },
192    UTF8Entry {
193        buf: [0x20, 0x0, 0x0],
194        len: UTF8Len::One,
195    },
196    UTF8Entry {
197        buf: [0x21, 0x0, 0x0],
198        len: UTF8Len::One,
199    },
200    UTF8Entry {
201        buf: [0x22, 0x0, 0x0],
202        len: UTF8Len::One,
203    },
204    UTF8Entry {
205        buf: [0x23, 0x0, 0x0],
206        len: UTF8Len::One,
207    },
208    UTF8Entry {
209        buf: [0x24, 0x0, 0x0],
210        len: UTF8Len::One,
211    },
212    UTF8Entry {
213        buf: [0x25, 0x0, 0x0],
214        len: UTF8Len::One,
215    },
216    UTF8Entry {
217        buf: [0x26, 0x0, 0x0],
218        len: UTF8Len::One,
219    },
220    UTF8Entry {
221        buf: [0x27, 0x0, 0x0],
222        len: UTF8Len::One,
223    },
224    UTF8Entry {
225        buf: [0x28, 0x0, 0x0],
226        len: UTF8Len::One,
227    },
228    UTF8Entry {
229        buf: [0x29, 0x0, 0x0],
230        len: UTF8Len::One,
231    },
232    UTF8Entry {
233        buf: [0x2A, 0x0, 0x0],
234        len: UTF8Len::One,
235    },
236    UTF8Entry {
237        buf: [0x2B, 0x0, 0x0],
238        len: UTF8Len::One,
239    },
240    UTF8Entry {
241        buf: [0x2C, 0x0, 0x0],
242        len: UTF8Len::One,
243    },
244    UTF8Entry {
245        buf: [0x2D, 0x0, 0x0],
246        len: UTF8Len::One,
247    },
248    UTF8Entry {
249        buf: [0x2E, 0x0, 0x0],
250        len: UTF8Len::One,
251    },
252    UTF8Entry {
253        buf: [0x2F, 0x0, 0x0],
254        len: UTF8Len::One,
255    },
256    UTF8Entry {
257        buf: [0x30, 0x0, 0x0],
258        len: UTF8Len::One,
259    },
260    UTF8Entry {
261        buf: [0x31, 0x0, 0x0],
262        len: UTF8Len::One,
263    },
264    UTF8Entry {
265        buf: [0x32, 0x0, 0x0],
266        len: UTF8Len::One,
267    },
268    UTF8Entry {
269        buf: [0x33, 0x0, 0x0],
270        len: UTF8Len::One,
271    },
272    UTF8Entry {
273        buf: [0x34, 0x0, 0x0],
274        len: UTF8Len::One,
275    },
276    UTF8Entry {
277        buf: [0x35, 0x0, 0x0],
278        len: UTF8Len::One,
279    },
280    UTF8Entry {
281        buf: [0x36, 0x0, 0x0],
282        len: UTF8Len::One,
283    },
284    UTF8Entry {
285        buf: [0x37, 0x0, 0x0],
286        len: UTF8Len::One,
287    },
288    UTF8Entry {
289        buf: [0x38, 0x0, 0x0],
290        len: UTF8Len::One,
291    },
292    UTF8Entry {
293        buf: [0x39, 0x0, 0x0],
294        len: UTF8Len::One,
295    },
296    UTF8Entry {
297        buf: [0x3A, 0x0, 0x0],
298        len: UTF8Len::One,
299    },
300    UTF8Entry {
301        buf: [0x3B, 0x0, 0x0],
302        len: UTF8Len::One,
303    },
304    UTF8Entry {
305        buf: [0x3C, 0x0, 0x0],
306        len: UTF8Len::One,
307    },
308    UTF8Entry {
309        buf: [0x3D, 0x0, 0x0],
310        len: UTF8Len::One,
311    },
312    UTF8Entry {
313        buf: [0x3E, 0x0, 0x0],
314        len: UTF8Len::One,
315    },
316    UTF8Entry {
317        buf: [0x3F, 0x0, 0x0],
318        len: UTF8Len::One,
319    },
320    UTF8Entry {
321        buf: [0x40, 0x0, 0x0],
322        len: UTF8Len::One,
323    },
324    UTF8Entry {
325        buf: [0x41, 0x0, 0x0],
326        len: UTF8Len::One,
327    },
328    UTF8Entry {
329        buf: [0x42, 0x0, 0x0],
330        len: UTF8Len::One,
331    },
332    UTF8Entry {
333        buf: [0x43, 0x0, 0x0],
334        len: UTF8Len::One,
335    },
336    UTF8Entry {
337        buf: [0x44, 0x0, 0x0],
338        len: UTF8Len::One,
339    },
340    UTF8Entry {
341        buf: [0x45, 0x0, 0x0],
342        len: UTF8Len::One,
343    },
344    UTF8Entry {
345        buf: [0x46, 0x0, 0x0],
346        len: UTF8Len::One,
347    },
348    UTF8Entry {
349        buf: [0x47, 0x0, 0x0],
350        len: UTF8Len::One,
351    },
352    UTF8Entry {
353        buf: [0x48, 0x0, 0x0],
354        len: UTF8Len::One,
355    },
356    UTF8Entry {
357        buf: [0x49, 0x0, 0x0],
358        len: UTF8Len::One,
359    },
360    UTF8Entry {
361        buf: [0x4A, 0x0, 0x0],
362        len: UTF8Len::One,
363    },
364    UTF8Entry {
365        buf: [0x4B, 0x0, 0x0],
366        len: UTF8Len::One,
367    },
368    UTF8Entry {
369        buf: [0x4C, 0x0, 0x0],
370        len: UTF8Len::One,
371    },
372    UTF8Entry {
373        buf: [0x4D, 0x0, 0x0],
374        len: UTF8Len::One,
375    },
376    UTF8Entry {
377        buf: [0x4E, 0x0, 0x0],
378        len: UTF8Len::One,
379    },
380    UTF8Entry {
381        buf: [0x4F, 0x0, 0x0],
382        len: UTF8Len::One,
383    },
384    UTF8Entry {
385        buf: [0x50, 0x0, 0x0],
386        len: UTF8Len::One,
387    },
388    UTF8Entry {
389        buf: [0x51, 0x0, 0x0],
390        len: UTF8Len::One,
391    },
392    UTF8Entry {
393        buf: [0x52, 0x0, 0x0],
394        len: UTF8Len::One,
395    },
396    UTF8Entry {
397        buf: [0x53, 0x0, 0x0],
398        len: UTF8Len::One,
399    },
400    UTF8Entry {
401        buf: [0x54, 0x0, 0x0],
402        len: UTF8Len::One,
403    },
404    UTF8Entry {
405        buf: [0x55, 0x0, 0x0],
406        len: UTF8Len::One,
407    },
408    UTF8Entry {
409        buf: [0x56, 0x0, 0x0],
410        len: UTF8Len::One,
411    },
412    UTF8Entry {
413        buf: [0x57, 0x0, 0x0],
414        len: UTF8Len::One,
415    },
416    UTF8Entry {
417        buf: [0x58, 0x0, 0x0],
418        len: UTF8Len::One,
419    },
420    UTF8Entry {
421        buf: [0x59, 0x0, 0x0],
422        len: UTF8Len::One,
423    },
424    UTF8Entry {
425        buf: [0x5A, 0x0, 0x0],
426        len: UTF8Len::One,
427    },
428    UTF8Entry {
429        buf: [0x5B, 0x0, 0x0],
430        len: UTF8Len::One,
431    },
432    UTF8Entry {
433        buf: [0x5C, 0x0, 0x0],
434        len: UTF8Len::One,
435    },
436    UTF8Entry {
437        buf: [0x5D, 0x0, 0x0],
438        len: UTF8Len::One,
439    },
440    UTF8Entry {
441        buf: [0x5E, 0x0, 0x0],
442        len: UTF8Len::One,
443    },
444    UTF8Entry {
445        buf: [0x5F, 0x0, 0x0],
446        len: UTF8Len::One,
447    },
448    UTF8Entry {
449        buf: [0x60, 0x0, 0x0],
450        len: UTF8Len::One,
451    },
452    UTF8Entry {
453        buf: [0x61, 0x0, 0x0],
454        len: UTF8Len::One,
455    },
456    UTF8Entry {
457        buf: [0x62, 0x0, 0x0],
458        len: UTF8Len::One,
459    },
460    UTF8Entry {
461        buf: [0x63, 0x0, 0x0],
462        len: UTF8Len::One,
463    },
464    UTF8Entry {
465        buf: [0x64, 0x0, 0x0],
466        len: UTF8Len::One,
467    },
468    UTF8Entry {
469        buf: [0x65, 0x0, 0x0],
470        len: UTF8Len::One,
471    },
472    UTF8Entry {
473        buf: [0x66, 0x0, 0x0],
474        len: UTF8Len::One,
475    },
476    UTF8Entry {
477        buf: [0x67, 0x0, 0x0],
478        len: UTF8Len::One,
479    },
480    UTF8Entry {
481        buf: [0x68, 0x0, 0x0],
482        len: UTF8Len::One,
483    },
484    UTF8Entry {
485        buf: [0x69, 0x0, 0x0],
486        len: UTF8Len::One,
487    },
488    UTF8Entry {
489        buf: [0x6A, 0x0, 0x0],
490        len: UTF8Len::One,
491    },
492    UTF8Entry {
493        buf: [0x6B, 0x0, 0x0],
494        len: UTF8Len::One,
495    },
496    UTF8Entry {
497        buf: [0x6C, 0x0, 0x0],
498        len: UTF8Len::One,
499    },
500    UTF8Entry {
501        buf: [0x6D, 0x0, 0x0],
502        len: UTF8Len::One,
503    },
504    UTF8Entry {
505        buf: [0x6E, 0x0, 0x0],
506        len: UTF8Len::One,
507    },
508    UTF8Entry {
509        buf: [0x6F, 0x0, 0x0],
510        len: UTF8Len::One,
511    },
512    UTF8Entry {
513        buf: [0x70, 0x0, 0x0],
514        len: UTF8Len::One,
515    },
516    UTF8Entry {
517        buf: [0x71, 0x0, 0x0],
518        len: UTF8Len::One,
519    },
520    UTF8Entry {
521        buf: [0x72, 0x0, 0x0],
522        len: UTF8Len::One,
523    },
524    UTF8Entry {
525        buf: [0x73, 0x0, 0x0],
526        len: UTF8Len::One,
527    },
528    UTF8Entry {
529        buf: [0x74, 0x0, 0x0],
530        len: UTF8Len::One,
531    },
532    UTF8Entry {
533        buf: [0x75, 0x0, 0x0],
534        len: UTF8Len::One,
535    },
536    UTF8Entry {
537        buf: [0x76, 0x0, 0x0],
538        len: UTF8Len::One,
539    },
540    UTF8Entry {
541        buf: [0x77, 0x0, 0x0],
542        len: UTF8Len::One,
543    },
544    UTF8Entry {
545        buf: [0x78, 0x0, 0x0],
546        len: UTF8Len::One,
547    },
548    UTF8Entry {
549        buf: [0x79, 0x0, 0x0],
550        len: UTF8Len::One,
551    },
552    UTF8Entry {
553        buf: [0x7A, 0x0, 0x0],
554        len: UTF8Len::One,
555    },
556    UTF8Entry {
557        buf: [0x7B, 0x0, 0x0],
558        len: UTF8Len::One,
559    },
560    UTF8Entry {
561        buf: [0x7C, 0x0, 0x0],
562        len: UTF8Len::One,
563    },
564    UTF8Entry {
565        buf: [0x7D, 0x0, 0x0],
566        len: UTF8Len::One,
567    },
568    UTF8Entry {
569        buf: [0x7E, 0x0, 0x0],
570        len: UTF8Len::One,
571    },
572    UTF8Entry {
573        buf: [0x7F, 0x0, 0x0],
574        len: UTF8Len::One,
575    },
576    UTF8Entry {
577        buf: [0xD0, 0x90, 0x0],
578        len: UTF8Len::Two,
579    },
580    UTF8Entry {
581        buf: [0xD0, 0x91, 0x0],
582        len: UTF8Len::Two,
583    },
584    UTF8Entry {
585        buf: [0xD0, 0x92, 0x0],
586        len: UTF8Len::Two,
587    },
588    UTF8Entry {
589        buf: [0xD0, 0x93, 0x0],
590        len: UTF8Len::Two,
591    },
592    UTF8Entry {
593        buf: [0xD0, 0x94, 0x0],
594        len: UTF8Len::Two,
595    },
596    UTF8Entry {
597        buf: [0xD0, 0x95, 0x0],
598        len: UTF8Len::Two,
599    },
600    UTF8Entry {
601        buf: [0xD0, 0x96, 0x0],
602        len: UTF8Len::Two,
603    },
604    UTF8Entry {
605        buf: [0xD0, 0x97, 0x0],
606        len: UTF8Len::Two,
607    },
608    UTF8Entry {
609        buf: [0xD0, 0x98, 0x0],
610        len: UTF8Len::Two,
611    },
612    UTF8Entry {
613        buf: [0xD0, 0x99, 0x0],
614        len: UTF8Len::Two,
615    },
616    UTF8Entry {
617        buf: [0xD0, 0x9A, 0x0],
618        len: UTF8Len::Two,
619    },
620    UTF8Entry {
621        buf: [0xD0, 0x9B, 0x0],
622        len: UTF8Len::Two,
623    },
624    UTF8Entry {
625        buf: [0xD0, 0x9C, 0x0],
626        len: UTF8Len::Two,
627    },
628    UTF8Entry {
629        buf: [0xD0, 0x9D, 0x0],
630        len: UTF8Len::Two,
631    },
632    UTF8Entry {
633        buf: [0xD0, 0x9E, 0x0],
634        len: UTF8Len::Two,
635    },
636    UTF8Entry {
637        buf: [0xD0, 0x9F, 0x0],
638        len: UTF8Len::Two,
639    },
640    UTF8Entry {
641        buf: [0xD0, 0xA0, 0x0],
642        len: UTF8Len::Two,
643    },
644    UTF8Entry {
645        buf: [0xD0, 0xA1, 0x0],
646        len: UTF8Len::Two,
647    },
648    UTF8Entry {
649        buf: [0xD0, 0xA2, 0x0],
650        len: UTF8Len::Two,
651    },
652    UTF8Entry {
653        buf: [0xD0, 0xA3, 0x0],
654        len: UTF8Len::Two,
655    },
656    UTF8Entry {
657        buf: [0xD0, 0xA4, 0x0],
658        len: UTF8Len::Two,
659    },
660    UTF8Entry {
661        buf: [0xD0, 0xA5, 0x0],
662        len: UTF8Len::Two,
663    },
664    UTF8Entry {
665        buf: [0xD0, 0xA6, 0x0],
666        len: UTF8Len::Two,
667    },
668    UTF8Entry {
669        buf: [0xD0, 0xA7, 0x0],
670        len: UTF8Len::Two,
671    },
672    UTF8Entry {
673        buf: [0xD0, 0xA8, 0x0],
674        len: UTF8Len::Two,
675    },
676    UTF8Entry {
677        buf: [0xD0, 0xA9, 0x0],
678        len: UTF8Len::Two,
679    },
680    UTF8Entry {
681        buf: [0xD0, 0xAA, 0x0],
682        len: UTF8Len::Two,
683    },
684    UTF8Entry {
685        buf: [0xD0, 0xAB, 0x0],
686        len: UTF8Len::Two,
687    },
688    UTF8Entry {
689        buf: [0xD0, 0xAC, 0x0],
690        len: UTF8Len::Two,
691    },
692    UTF8Entry {
693        buf: [0xD0, 0xAD, 0x0],
694        len: UTF8Len::Two,
695    },
696    UTF8Entry {
697        buf: [0xD0, 0xAE, 0x0],
698        len: UTF8Len::Two,
699    },
700    UTF8Entry {
701        buf: [0xD0, 0xAF, 0x0],
702        len: UTF8Len::Two,
703    },
704    UTF8Entry {
705        buf: [0xD0, 0xB0, 0x0],
706        len: UTF8Len::Two,
707    },
708    UTF8Entry {
709        buf: [0xD0, 0xB1, 0x0],
710        len: UTF8Len::Two,
711    },
712    UTF8Entry {
713        buf: [0xD0, 0xB2, 0x0],
714        len: UTF8Len::Two,
715    },
716    UTF8Entry {
717        buf: [0xD0, 0xB3, 0x0],
718        len: UTF8Len::Two,
719    },
720    UTF8Entry {
721        buf: [0xD0, 0xB4, 0x0],
722        len: UTF8Len::Two,
723    },
724    UTF8Entry {
725        buf: [0xD0, 0xB5, 0x0],
726        len: UTF8Len::Two,
727    },
728    UTF8Entry {
729        buf: [0xD0, 0xB6, 0x0],
730        len: UTF8Len::Two,
731    },
732    UTF8Entry {
733        buf: [0xD0, 0xB7, 0x0],
734        len: UTF8Len::Two,
735    },
736    UTF8Entry {
737        buf: [0xD0, 0xB8, 0x0],
738        len: UTF8Len::Two,
739    },
740    UTF8Entry {
741        buf: [0xD0, 0xB9, 0x0],
742        len: UTF8Len::Two,
743    },
744    UTF8Entry {
745        buf: [0xD0, 0xBA, 0x0],
746        len: UTF8Len::Two,
747    },
748    UTF8Entry {
749        buf: [0xD0, 0xBB, 0x0],
750        len: UTF8Len::Two,
751    },
752    UTF8Entry {
753        buf: [0xD0, 0xBC, 0x0],
754        len: UTF8Len::Two,
755    },
756    UTF8Entry {
757        buf: [0xD0, 0xBD, 0x0],
758        len: UTF8Len::Two,
759    },
760    UTF8Entry {
761        buf: [0xD0, 0xBE, 0x0],
762        len: UTF8Len::Two,
763    },
764    UTF8Entry {
765        buf: [0xD0, 0xBF, 0x0],
766        len: UTF8Len::Two,
767    },
768    UTF8Entry {
769        buf: [0xE2, 0x96, 0x91],
770        len: UTF8Len::Three,
771    },
772    UTF8Entry {
773        buf: [0xE2, 0x96, 0x92],
774        len: UTF8Len::Three,
775    },
776    UTF8Entry {
777        buf: [0xE2, 0x96, 0x93],
778        len: UTF8Len::Three,
779    },
780    UTF8Entry {
781        buf: [0xE2, 0x94, 0x82],
782        len: UTF8Len::Three,
783    },
784    UTF8Entry {
785        buf: [0xE2, 0x94, 0xA4],
786        len: UTF8Len::Three,
787    },
788    UTF8Entry {
789        buf: [0xE2, 0x95, 0xA1],
790        len: UTF8Len::Three,
791    },
792    UTF8Entry {
793        buf: [0xE2, 0x95, 0xA2],
794        len: UTF8Len::Three,
795    },
796    UTF8Entry {
797        buf: [0xE2, 0x95, 0x96],
798        len: UTF8Len::Three,
799    },
800    UTF8Entry {
801        buf: [0xE2, 0x95, 0x95],
802        len: UTF8Len::Three,
803    },
804    UTF8Entry {
805        buf: [0xE2, 0x95, 0xA3],
806        len: UTF8Len::Three,
807    },
808    UTF8Entry {
809        buf: [0xE2, 0x95, 0x91],
810        len: UTF8Len::Three,
811    },
812    UTF8Entry {
813        buf: [0xE2, 0x95, 0x97],
814        len: UTF8Len::Three,
815    },
816    UTF8Entry {
817        buf: [0xE2, 0x95, 0x9D],
818        len: UTF8Len::Three,
819    },
820    UTF8Entry {
821        buf: [0xE2, 0x95, 0x9C],
822        len: UTF8Len::Three,
823    },
824    UTF8Entry {
825        buf: [0xE2, 0x95, 0x9B],
826        len: UTF8Len::Three,
827    },
828    UTF8Entry {
829        buf: [0xE2, 0x94, 0x90],
830        len: UTF8Len::Three,
831    },
832    UTF8Entry {
833        buf: [0xE2, 0x94, 0x94],
834        len: UTF8Len::Three,
835    },
836    UTF8Entry {
837        buf: [0xE2, 0x94, 0xB4],
838        len: UTF8Len::Three,
839    },
840    UTF8Entry {
841        buf: [0xE2, 0x94, 0xAC],
842        len: UTF8Len::Three,
843    },
844    UTF8Entry {
845        buf: [0xE2, 0x94, 0x9C],
846        len: UTF8Len::Three,
847    },
848    UTF8Entry {
849        buf: [0xE2, 0x94, 0x80],
850        len: UTF8Len::Three,
851    },
852    UTF8Entry {
853        buf: [0xE2, 0x94, 0xBC],
854        len: UTF8Len::Three,
855    },
856    UTF8Entry {
857        buf: [0xE2, 0x95, 0x9E],
858        len: UTF8Len::Three,
859    },
860    UTF8Entry {
861        buf: [0xE2, 0x95, 0x9F],
862        len: UTF8Len::Three,
863    },
864    UTF8Entry {
865        buf: [0xE2, 0x95, 0x9A],
866        len: UTF8Len::Three,
867    },
868    UTF8Entry {
869        buf: [0xE2, 0x95, 0x94],
870        len: UTF8Len::Three,
871    },
872    UTF8Entry {
873        buf: [0xE2, 0x95, 0xA9],
874        len: UTF8Len::Three,
875    },
876    UTF8Entry {
877        buf: [0xE2, 0x95, 0xA6],
878        len: UTF8Len::Three,
879    },
880    UTF8Entry {
881        buf: [0xE2, 0x95, 0xA0],
882        len: UTF8Len::Three,
883    },
884    UTF8Entry {
885        buf: [0xE2, 0x95, 0x90],
886        len: UTF8Len::Three,
887    },
888    UTF8Entry {
889        buf: [0xE2, 0x95, 0xAC],
890        len: UTF8Len::Three,
891    },
892    UTF8Entry {
893        buf: [0xE2, 0x95, 0xA7],
894        len: UTF8Len::Three,
895    },
896    UTF8Entry {
897        buf: [0xE2, 0x95, 0xA8],
898        len: UTF8Len::Three,
899    },
900    UTF8Entry {
901        buf: [0xE2, 0x95, 0xA4],
902        len: UTF8Len::Three,
903    },
904    UTF8Entry {
905        buf: [0xE2, 0x95, 0xA5],
906        len: UTF8Len::Three,
907    },
908    UTF8Entry {
909        buf: [0xE2, 0x95, 0x99],
910        len: UTF8Len::Three,
911    },
912    UTF8Entry {
913        buf: [0xE2, 0x95, 0x98],
914        len: UTF8Len::Three,
915    },
916    UTF8Entry {
917        buf: [0xE2, 0x95, 0x92],
918        len: UTF8Len::Three,
919    },
920    UTF8Entry {
921        buf: [0xE2, 0x95, 0x93],
922        len: UTF8Len::Three,
923    },
924    UTF8Entry {
925        buf: [0xE2, 0x95, 0xAB],
926        len: UTF8Len::Three,
927    },
928    UTF8Entry {
929        buf: [0xE2, 0x95, 0xAA],
930        len: UTF8Len::Three,
931    },
932    UTF8Entry {
933        buf: [0xE2, 0x94, 0x98],
934        len: UTF8Len::Three,
935    },
936    UTF8Entry {
937        buf: [0xE2, 0x94, 0x8C],
938        len: UTF8Len::Three,
939    },
940    UTF8Entry {
941        buf: [0xE2, 0x96, 0x88],
942        len: UTF8Len::Three,
943    },
944    UTF8Entry {
945        buf: [0xE2, 0x96, 0x84],
946        len: UTF8Len::Three,
947    },
948    UTF8Entry {
949        buf: [0xE2, 0x96, 0x8C],
950        len: UTF8Len::Three,
951    },
952    UTF8Entry {
953        buf: [0xE2, 0x96, 0x90],
954        len: UTF8Len::Three,
955    },
956    UTF8Entry {
957        buf: [0xE2, 0x96, 0x80],
958        len: UTF8Len::Three,
959    },
960    UTF8Entry {
961        buf: [0xD1, 0x80, 0x0],
962        len: UTF8Len::Two,
963    },
964    UTF8Entry {
965        buf: [0xD1, 0x81, 0x0],
966        len: UTF8Len::Two,
967    },
968    UTF8Entry {
969        buf: [0xD1, 0x82, 0x0],
970        len: UTF8Len::Two,
971    },
972    UTF8Entry {
973        buf: [0xD1, 0x83, 0x0],
974        len: UTF8Len::Two,
975    },
976    UTF8Entry {
977        buf: [0xD1, 0x84, 0x0],
978        len: UTF8Len::Two,
979    },
980    UTF8Entry {
981        buf: [0xD1, 0x85, 0x0],
982        len: UTF8Len::Two,
983    },
984    UTF8Entry {
985        buf: [0xD1, 0x86, 0x0],
986        len: UTF8Len::Two,
987    },
988    UTF8Entry {
989        buf: [0xD1, 0x87, 0x0],
990        len: UTF8Len::Two,
991    },
992    UTF8Entry {
993        buf: [0xD1, 0x88, 0x0],
994        len: UTF8Len::Two,
995    },
996    UTF8Entry {
997        buf: [0xD1, 0x89, 0x0],
998        len: UTF8Len::Two,
999    },
1000    UTF8Entry {
1001        buf: [0xD1, 0x8A, 0x0],
1002        len: UTF8Len::Two,
1003    },
1004    UTF8Entry {
1005        buf: [0xD1, 0x8B, 0x0],
1006        len: UTF8Len::Two,
1007    },
1008    UTF8Entry {
1009        buf: [0xD1, 0x8C, 0x0],
1010        len: UTF8Len::Two,
1011    },
1012    UTF8Entry {
1013        buf: [0xD1, 0x8D, 0x0],
1014        len: UTF8Len::Two,
1015    },
1016    UTF8Entry {
1017        buf: [0xD1, 0x8E, 0x0],
1018        len: UTF8Len::Two,
1019    },
1020    UTF8Entry {
1021        buf: [0xD1, 0x8F, 0x0],
1022        len: UTF8Len::Two,
1023    },
1024    UTF8Entry {
1025        buf: [0xD0, 0x81, 0x0],
1026        len: UTF8Len::Two,
1027    },
1028    UTF8Entry {
1029        buf: [0xD1, 0x91, 0x0],
1030        len: UTF8Len::Two,
1031    },
1032    UTF8Entry {
1033        buf: [0xD0, 0x84, 0x0],
1034        len: UTF8Len::Two,
1035    },
1036    UTF8Entry {
1037        buf: [0xD1, 0x94, 0x0],
1038        len: UTF8Len::Two,
1039    },
1040    UTF8Entry {
1041        buf: [0xD0, 0x87, 0x0],
1042        len: UTF8Len::Two,
1043    },
1044    UTF8Entry {
1045        buf: [0xD1, 0x97, 0x0],
1046        len: UTF8Len::Two,
1047    },
1048    UTF8Entry {
1049        buf: [0xD0, 0x8E, 0x0],
1050        len: UTF8Len::Two,
1051    },
1052    UTF8Entry {
1053        buf: [0xD1, 0x9E, 0x0],
1054        len: UTF8Len::Two,
1055    },
1056    UTF8Entry {
1057        buf: [0xC2, 0xB0, 0x0],
1058        len: UTF8Len::Two,
1059    },
1060    UTF8Entry {
1061        buf: [0xE2, 0x88, 0x99],
1062        len: UTF8Len::Three,
1063    },
1064    UTF8Entry {
1065        buf: [0xC2, 0xB7, 0x0],
1066        len: UTF8Len::Two,
1067    },
1068    UTF8Entry {
1069        buf: [0xE2, 0x88, 0x9A],
1070        len: UTF8Len::Three,
1071    },
1072    UTF8Entry {
1073        buf: [0xE2, 0x84, 0x96],
1074        len: UTF8Len::Three,
1075    },
1076    UTF8Entry {
1077        buf: [0xC2, 0xA4, 0x0],
1078        len: UTF8Len::Two,
1079    },
1080    UTF8Entry {
1081        buf: [0xE2, 0x96, 0xA0],
1082        len: UTF8Len::Three,
1083    },
1084    UTF8Entry {
1085        buf: [0xC2, 0xA0, 0x0],
1086        len: UTF8Len::Two,
1087    },
1088];
1089impl Encoder for CP866 {
1090    #[doc(hidden)]
1091    #[inline]
1092    fn encode_grapheme(&self, bytes: &mut &[u8]) -> Option<u8> {
1093        let (&a, rest) = bytes.split_first().unwrap();
1094        Some(
1095            match (a, &bytes) {
1096                (0x00..=0x7F, _) => {
1097                    *bytes = rest;
1098                    a
1099                }
1100                (0xC2, [_, b, ..]) => {
1101                    *bytes = &bytes[2..];
1102                    match b {
1103                        0xB0 => 0xF8,
1104                        0xB7 => 0xFA,
1105                        0xA4 => 0xFD,
1106                        0xA0 => 0xFF,
1107                        _ => return None,
1108                    }
1109                }
1110                (0xD0, [_, b, ..]) => {
1111                    *bytes = &bytes[2..];
1112                    match b {
1113                        0x90 => 0x80,
1114                        0x91 => 0x81,
1115                        0x92 => 0x82,
1116                        0x93 => 0x83,
1117                        0x94 => 0x84,
1118                        0x95 => 0x85,
1119                        0x96 => 0x86,
1120                        0x97 => 0x87,
1121                        0x98 => 0x88,
1122                        0x99 => 0x89,
1123                        0x9A => 0x8A,
1124                        0x9B => 0x8B,
1125                        0x9C => 0x8C,
1126                        0x9D => 0x8D,
1127                        0x9E => 0x8E,
1128                        0x9F => 0x8F,
1129                        0xA0 => 0x90,
1130                        0xA1 => 0x91,
1131                        0xA2 => 0x92,
1132                        0xA3 => 0x93,
1133                        0xA4 => 0x94,
1134                        0xA5 => 0x95,
1135                        0xA6 => 0x96,
1136                        0xA7 => 0x97,
1137                        0xA8 => 0x98,
1138                        0xA9 => 0x99,
1139                        0xAA => 0x9A,
1140                        0xAB => 0x9B,
1141                        0xAC => 0x9C,
1142                        0xAD => 0x9D,
1143                        0xAE => 0x9E,
1144                        0xAF => 0x9F,
1145                        0xB0 => 0xA0,
1146                        0xB1 => 0xA1,
1147                        0xB2 => 0xA2,
1148                        0xB3 => 0xA3,
1149                        0xB4 => 0xA4,
1150                        0xB5 => 0xA5,
1151                        0xB6 => 0xA6,
1152                        0xB7 => 0xA7,
1153                        0xB8 => 0xA8,
1154                        0xB9 => 0xA9,
1155                        0xBA => 0xAA,
1156                        0xBB => 0xAB,
1157                        0xBC => 0xAC,
1158                        0xBD => 0xAD,
1159                        0xBE => 0xAE,
1160                        0xBF => 0xAF,
1161                        0x81 => 0xF0,
1162                        0x84 => 0xF2,
1163                        0x87 => 0xF4,
1164                        0x8E => 0xF6,
1165                        _ => return None,
1166                    }
1167                }
1168                (0xD1, [_, b, ..]) => {
1169                    *bytes = &bytes[2..];
1170                    match b {
1171                        0x80 => 0xE0,
1172                        0x81 => 0xE1,
1173                        0x82 => 0xE2,
1174                        0x83 => 0xE3,
1175                        0x84 => 0xE4,
1176                        0x85 => 0xE5,
1177                        0x86 => 0xE6,
1178                        0x87 => 0xE7,
1179                        0x88 => 0xE8,
1180                        0x89 => 0xE9,
1181                        0x8A => 0xEA,
1182                        0x8B => 0xEB,
1183                        0x8C => 0xEC,
1184                        0x8D => 0xED,
1185                        0x8E => 0xEE,
1186                        0x8F => 0xEF,
1187                        0x91 => 0xF1,
1188                        0x94 => 0xF3,
1189                        0x97 => 0xF5,
1190                        0x9E => 0xF7,
1191                        _ => return None,
1192                    }
1193                }
1194                (0xE2, [_, b, c, ..]) => {
1195                    *bytes = &bytes[3..];
1196                    match b {
1197                        0x84 => {
1198                            match c {
1199                                0x96 => 0xFC,
1200                                _ => return None,
1201                            }
1202                        }
1203                        0x88 => {
1204                            match c {
1205                                0x99 => 0xF9,
1206                                0x9A => 0xFB,
1207                                _ => return None,
1208                            }
1209                        }
1210                        0x94 => {
1211                            match c {
1212                                0x82 => 0xB3,
1213                                0xA4 => 0xB4,
1214                                0x90 => 0xBF,
1215                                0x94 => 0xC0,
1216                                0xB4 => 0xC1,
1217                                0xAC => 0xC2,
1218                                0x9C => 0xC3,
1219                                0x80 => 0xC4,
1220                                0xBC => 0xC5,
1221                                0x98 => 0xD9,
1222                                0x8C => 0xDA,
1223                                _ => return None,
1224                            }
1225                        }
1226                        0x95 => {
1227                            match c {
1228                                0xA1 => 0xB5,
1229                                0xA2 => 0xB6,
1230                                0x96 => 0xB7,
1231                                0x95 => 0xB8,
1232                                0xA3 => 0xB9,
1233                                0x91 => 0xBA,
1234                                0x97 => 0xBB,
1235                                0x9D => 0xBC,
1236                                0x9C => 0xBD,
1237                                0x9B => 0xBE,
1238                                0x9E => 0xC6,
1239                                0x9F => 0xC7,
1240                                0x9A => 0xC8,
1241                                0x94 => 0xC9,
1242                                0xA9 => 0xCA,
1243                                0xA6 => 0xCB,
1244                                0xA0 => 0xCC,
1245                                0x90 => 0xCD,
1246                                0xAC => 0xCE,
1247                                0xA7 => 0xCF,
1248                                0xA8 => 0xD0,
1249                                0xA4 => 0xD1,
1250                                0xA5 => 0xD2,
1251                                0x99 => 0xD3,
1252                                0x98 => 0xD4,
1253                                0x92 => 0xD5,
1254                                0x93 => 0xD6,
1255                                0xAB => 0xD7,
1256                                0xAA => 0xD8,
1257                                _ => return None,
1258                            }
1259                        }
1260                        0x96 => {
1261                            match c {
1262                                0x91 => 0xB0,
1263                                0x92 => 0xB1,
1264                                0x93 => 0xB2,
1265                                0x88 => 0xDB,
1266                                0x84 => 0xDC,
1267                                0x8C => 0xDD,
1268                                0x90 => 0xDE,
1269                                0x80 => 0xDF,
1270                                0xA0 => 0xFE,
1271                                _ => return None,
1272                            }
1273                        }
1274                        _ => return None,
1275                    }
1276                }
1277                (0xC2..=0xDF, _) => {
1278                    *bytes = &bytes[2..];
1279                    return None;
1280                }
1281                (0xE0..=0xEF, _) => {
1282                    *bytes = &bytes[3..];
1283                    return None;
1284                }
1285                (0xF0..=0xF4, _) => {
1286                    *bytes = &bytes[4..];
1287                    return None;
1288                }
1289                _ => panic!(),
1290            },
1291        )
1292    }
1293}