mirror of
https://github.com/actix/actix-extras.git
synced 2024-11-25 00:12:59 +01:00
154 lines
4.0 KiB
Rust
154 lines
4.0 KiB
Rust
|
use std::fmt::{self, Display};
|
||
|
use std::str::FromStr;
|
||
|
|
||
|
use self::Charset::*;
|
||
|
|
||
|
/// A Mime charset.
|
||
|
///
|
||
|
/// The string representation is normalized to upper case.
|
||
|
///
|
||
|
/// See [http://www.iana.org/assignments/character-sets/character-sets.xhtml][url].
|
||
|
///
|
||
|
/// [url]: http://www.iana.org/assignments/character-sets/character-sets.xhtml
|
||
|
#[derive(Clone, Debug, PartialEq)]
|
||
|
#[allow(non_camel_case_types)]
|
||
|
pub enum Charset {
|
||
|
/// US ASCII
|
||
|
Us_Ascii,
|
||
|
/// ISO-8859-1
|
||
|
Iso_8859_1,
|
||
|
/// ISO-8859-2
|
||
|
Iso_8859_2,
|
||
|
/// ISO-8859-3
|
||
|
Iso_8859_3,
|
||
|
/// ISO-8859-4
|
||
|
Iso_8859_4,
|
||
|
/// ISO-8859-5
|
||
|
Iso_8859_5,
|
||
|
/// ISO-8859-6
|
||
|
Iso_8859_6,
|
||
|
/// ISO-8859-7
|
||
|
Iso_8859_7,
|
||
|
/// ISO-8859-8
|
||
|
Iso_8859_8,
|
||
|
/// ISO-8859-9
|
||
|
Iso_8859_9,
|
||
|
/// ISO-8859-10
|
||
|
Iso_8859_10,
|
||
|
/// Shift_JIS
|
||
|
Shift_Jis,
|
||
|
/// EUC-JP
|
||
|
Euc_Jp,
|
||
|
/// ISO-2022-KR
|
||
|
Iso_2022_Kr,
|
||
|
/// EUC-KR
|
||
|
Euc_Kr,
|
||
|
/// ISO-2022-JP
|
||
|
Iso_2022_Jp,
|
||
|
/// ISO-2022-JP-2
|
||
|
Iso_2022_Jp_2,
|
||
|
/// ISO-8859-6-E
|
||
|
Iso_8859_6_E,
|
||
|
/// ISO-8859-6-I
|
||
|
Iso_8859_6_I,
|
||
|
/// ISO-8859-8-E
|
||
|
Iso_8859_8_E,
|
||
|
/// ISO-8859-8-I
|
||
|
Iso_8859_8_I,
|
||
|
/// GB2312
|
||
|
Gb2312,
|
||
|
/// Big5
|
||
|
Big5,
|
||
|
/// KOI8-R
|
||
|
Koi8_R,
|
||
|
/// An arbitrary charset specified as a string
|
||
|
Ext(String),
|
||
|
}
|
||
|
|
||
|
impl Charset {
|
||
|
fn label(&self) -> &str {
|
||
|
match *self {
|
||
|
Us_Ascii => "US-ASCII",
|
||
|
Iso_8859_1 => "ISO-8859-1",
|
||
|
Iso_8859_2 => "ISO-8859-2",
|
||
|
Iso_8859_3 => "ISO-8859-3",
|
||
|
Iso_8859_4 => "ISO-8859-4",
|
||
|
Iso_8859_5 => "ISO-8859-5",
|
||
|
Iso_8859_6 => "ISO-8859-6",
|
||
|
Iso_8859_7 => "ISO-8859-7",
|
||
|
Iso_8859_8 => "ISO-8859-8",
|
||
|
Iso_8859_9 => "ISO-8859-9",
|
||
|
Iso_8859_10 => "ISO-8859-10",
|
||
|
Shift_Jis => "Shift-JIS",
|
||
|
Euc_Jp => "EUC-JP",
|
||
|
Iso_2022_Kr => "ISO-2022-KR",
|
||
|
Euc_Kr => "EUC-KR",
|
||
|
Iso_2022_Jp => "ISO-2022-JP",
|
||
|
Iso_2022_Jp_2 => "ISO-2022-JP-2",
|
||
|
Iso_8859_6_E => "ISO-8859-6-E",
|
||
|
Iso_8859_6_I => "ISO-8859-6-I",
|
||
|
Iso_8859_8_E => "ISO-8859-8-E",
|
||
|
Iso_8859_8_I => "ISO-8859-8-I",
|
||
|
Gb2312 => "GB2312",
|
||
|
Big5 => "big5",
|
||
|
Koi8_R => "KOI8-R",
|
||
|
Ext(ref s) => s,
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl Display for Charset {
|
||
|
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||
|
f.write_str(self.label())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl FromStr for Charset {
|
||
|
type Err = crate::Error;
|
||
|
|
||
|
fn from_str(s: &str) -> crate::Result<Charset> {
|
||
|
Ok(match s.to_ascii_uppercase().as_ref() {
|
||
|
"US-ASCII" => Us_Ascii,
|
||
|
"ISO-8859-1" => Iso_8859_1,
|
||
|
"ISO-8859-2" => Iso_8859_2,
|
||
|
"ISO-8859-3" => Iso_8859_3,
|
||
|
"ISO-8859-4" => Iso_8859_4,
|
||
|
"ISO-8859-5" => Iso_8859_5,
|
||
|
"ISO-8859-6" => Iso_8859_6,
|
||
|
"ISO-8859-7" => Iso_8859_7,
|
||
|
"ISO-8859-8" => Iso_8859_8,
|
||
|
"ISO-8859-9" => Iso_8859_9,
|
||
|
"ISO-8859-10" => Iso_8859_10,
|
||
|
"SHIFT-JIS" => Shift_Jis,
|
||
|
"EUC-JP" => Euc_Jp,
|
||
|
"ISO-2022-KR" => Iso_2022_Kr,
|
||
|
"EUC-KR" => Euc_Kr,
|
||
|
"ISO-2022-JP" => Iso_2022_Jp,
|
||
|
"ISO-2022-JP-2" => Iso_2022_Jp_2,
|
||
|
"ISO-8859-6-E" => Iso_8859_6_E,
|
||
|
"ISO-8859-6-I" => Iso_8859_6_I,
|
||
|
"ISO-8859-8-E" => Iso_8859_8_E,
|
||
|
"ISO-8859-8-I" => Iso_8859_8_I,
|
||
|
"GB2312" => Gb2312,
|
||
|
"big5" => Big5,
|
||
|
"KOI8-R" => Koi8_R,
|
||
|
s => Ext(s.to_owned()),
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn test_parse() {
|
||
|
assert_eq!(Us_Ascii, "us-ascii".parse().unwrap());
|
||
|
assert_eq!(Us_Ascii, "US-Ascii".parse().unwrap());
|
||
|
assert_eq!(Us_Ascii, "US-ASCII".parse().unwrap());
|
||
|
assert_eq!(Shift_Jis, "Shift-JIS".parse().unwrap());
|
||
|
assert_eq!(Ext("ABCD".to_owned()), "abcd".parse().unwrap());
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn test_display() {
|
||
|
assert_eq!("US-ASCII", format!("{}", Us_Ascii));
|
||
|
assert_eq!("ABCD", format!("{}", Ext("ABCD".to_owned())));
|
||
|
}
|