dbase/encoding/
yore.rs

1use std::borrow::Cow;
2
3use super::{AsCodePageMark, DecodeError, EncodeError, Encoding};
4
5impl_as_code_page_mark!(
6    yore::code_pages::CP437 => crate::CodePageMark::CP437,
7    yore::code_pages::CP850 => crate::CodePageMark::CP850,
8    yore::code_pages::CP1252 => crate::CodePageMark::CP1252,
9    yore::code_pages::CP852 => crate::CodePageMark::CP852,
10    yore::code_pages::CP866 => crate::CodePageMark::CP866,
11    yore::code_pages::CP865 => crate::CodePageMark::CP865,
12    yore::code_pages::CP861 => crate::CodePageMark::CP861,
13    yore::code_pages::CP874 => crate::CodePageMark::CP874,
14    yore::code_pages::CP1255 => crate::CodePageMark::CP1255,
15    yore::code_pages::CP1256 => crate::CodePageMark::CP1256,
16    yore::code_pages::CP1250 => crate::CodePageMark::CP1250,
17    yore::code_pages::CP1251 => crate::CodePageMark::CP1251,
18    yore::code_pages::CP1254 => crate::CodePageMark::CP1254,
19    yore::code_pages::CP1253 => crate::CodePageMark::CP1253,
20);
21
22impl<T> Encoding for T
23where
24    T: 'static + yore::CodePage + Clone + AsCodePageMark + Send,
25{
26    fn decode<'a>(&self, bytes: &'a [u8]) -> Result<Cow<'a, str>, DecodeError> {
27        self.decode(bytes).map_err(Into::into)
28    }
29
30    fn encode<'a>(&self, s: &'a str) -> Result<Cow<'a, [u8]>, EncodeError> {
31        self.encode(s).map_err(Into::into)
32    }
33}
34
35#[derive(Copy, Clone)]
36pub struct LossyCodePage<CP>(pub CP);
37
38impl<CP> AsCodePageMark for LossyCodePage<CP>
39where
40    CP: AsCodePageMark,
41{
42    fn code_page_mark(&self) -> crate::CodePageMark {
43        self.0.code_page_mark()
44    }
45}
46
47impl<CP> Encoding for LossyCodePage<CP>
48where
49    CP: 'static + yore::CodePage + Clone + AsCodePageMark + Send,
50{
51    fn decode<'a>(&self, bytes: &'a [u8]) -> Result<Cow<'a, str>, DecodeError> {
52        Ok(self.0.decode_lossy(bytes))
53    }
54
55    fn encode<'a>(&self, s: &'a str) -> Result<Cow<'a, [u8]>, EncodeError> {
56        Ok(self.0.encode_lossy(s, b'?'))
57    }
58}