blob: 0b75adc96aa4e436e5b608e0f529e99ee480d81c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
use bstr::BStr;
use encoding_rs::Encoding;
///
pub mod for_label {
use bstr::BString;
/// The error returned by [for_label()][super::for_label()].
#[derive(Debug, thiserror::Error)]
#[allow(missing_docs)]
pub enum Error {
#[error("An encoding named '{name}' is not known")]
Unknown { name: BString },
}
}
/// Try to produce a new `Encoding` for `label` or report an error if it is not known.
///
/// ### Deviation
///
/// * There is no special handling of UTF-16LE/BE with checks if data contains a BOM or not, like `git` as we don't expect to have
/// data available here.
/// * Special `-BOM` suffixed versions of `UTF-16` encodings are not supported.
pub fn for_label<'a>(label: impl Into<&'a BStr>) -> Result<&'static Encoding, for_label::Error> {
let mut label = label.into();
if label == "latin-1" {
label = "ISO-8859-1".into();
}
let enc = Encoding::for_label(label.as_ref()).ok_or_else(|| for_label::Error::Unknown { name: label.into() })?;
Ok(enc)
}
|