#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Thai {
CharacterKoKai,
CharacterKhoKhai,
CharacterKhoKhuat,
CharacterKhoKhwai,
CharacterKhoKhon,
CharacterKhoRakhang,
CharacterNgoNgu,
CharacterChoChan,
CharacterChoChing,
CharacterChoChang,
CharacterSoSo,
CharacterChoChoe,
CharacterYoYing,
CharacterDoChada,
CharacterToPatak,
CharacterThoThan,
CharacterThoNangmontho,
CharacterThoPhuthao,
CharacterNoNen,
CharacterDoDek,
CharacterToTao,
CharacterThoThung,
CharacterThoThahan,
CharacterThoThong,
CharacterNoNu,
CharacterBoBaimai,
CharacterPoPla,
CharacterPhoPhung,
CharacterFoFa,
CharacterPhoPhan,
CharacterFoFan,
CharacterPhoSamphao,
CharacterMoMa,
CharacterYoYak,
CharacterRoRua,
CharacterRu,
CharacterLoLing,
CharacterLu,
CharacterWoWaen,
CharacterSoSala,
CharacterSoRusi,
CharacterSoSua,
CharacterHoHip,
CharacterLoChula,
CharacterOAng,
CharacterHoNokhuk,
CharacterPaiyannoi,
CharacterSaraA,
CharacterMaiHanDashAkat,
CharacterSaraAa,
CharacterSaraAm,
CharacterSaraI,
CharacterSaraIi,
CharacterSaraUe,
CharacterSaraUee,
CharacterSaraU,
CharacterSaraUu,
CharacterPhinthu,
CurrencySymbolBaht,
CharacterSaraE,
CharacterSaraAe,
CharacterSaraO,
CharacterSaraAiMaimuan,
CharacterSaraAiMaimalai,
CharacterLakkhangyao,
CharacterMaiyamok,
CharacterMaitaikhu,
CharacterMaiEk,
CharacterMaiTho,
CharacterMaiTri,
CharacterMaiChattawa,
CharacterThanthakhat,
CharacterNikhahit,
CharacterYamakkan,
CharacterFongman,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
CharacterAngkhankhu,
CharacterKhomut,
}
impl Into<char> for Thai {
fn into(self) -> char {
match self {
Thai::CharacterKoKai => 'ก',
Thai::CharacterKhoKhai => 'ข',
Thai::CharacterKhoKhuat => 'ฃ',
Thai::CharacterKhoKhwai => 'ค',
Thai::CharacterKhoKhon => 'ฅ',
Thai::CharacterKhoRakhang => 'ฆ',
Thai::CharacterNgoNgu => 'ง',
Thai::CharacterChoChan => 'จ',
Thai::CharacterChoChing => 'ฉ',
Thai::CharacterChoChang => 'ช',
Thai::CharacterSoSo => 'ซ',
Thai::CharacterChoChoe => 'ฌ',
Thai::CharacterYoYing => 'ญ',
Thai::CharacterDoChada => 'ฎ',
Thai::CharacterToPatak => 'ฏ',
Thai::CharacterThoThan => 'ฐ',
Thai::CharacterThoNangmontho => 'ฑ',
Thai::CharacterThoPhuthao => 'ฒ',
Thai::CharacterNoNen => 'ณ',
Thai::CharacterDoDek => 'ด',
Thai::CharacterToTao => 'ต',
Thai::CharacterThoThung => 'ถ',
Thai::CharacterThoThahan => 'ท',
Thai::CharacterThoThong => 'ธ',
Thai::CharacterNoNu => 'น',
Thai::CharacterBoBaimai => 'บ',
Thai::CharacterPoPla => 'ป',
Thai::CharacterPhoPhung => 'ผ',
Thai::CharacterFoFa => 'ฝ',
Thai::CharacterPhoPhan => 'พ',
Thai::CharacterFoFan => 'ฟ',
Thai::CharacterPhoSamphao => 'ภ',
Thai::CharacterMoMa => 'ม',
Thai::CharacterYoYak => 'ย',
Thai::CharacterRoRua => 'ร',
Thai::CharacterRu => 'ฤ',
Thai::CharacterLoLing => 'ล',
Thai::CharacterLu => 'ฦ',
Thai::CharacterWoWaen => 'ว',
Thai::CharacterSoSala => 'ศ',
Thai::CharacterSoRusi => 'ษ',
Thai::CharacterSoSua => 'ส',
Thai::CharacterHoHip => 'ห',
Thai::CharacterLoChula => 'ฬ',
Thai::CharacterOAng => 'อ',
Thai::CharacterHoNokhuk => 'ฮ',
Thai::CharacterPaiyannoi => 'ฯ',
Thai::CharacterSaraA => 'ะ',
Thai::CharacterMaiHanDashAkat => 'ั',
Thai::CharacterSaraAa => 'า',
Thai::CharacterSaraAm => 'ำ',
Thai::CharacterSaraI => 'ิ',
Thai::CharacterSaraIi => 'ี',
Thai::CharacterSaraUe => 'ึ',
Thai::CharacterSaraUee => 'ื',
Thai::CharacterSaraU => 'ุ',
Thai::CharacterSaraUu => 'ู',
Thai::CharacterPhinthu => 'ฺ',
Thai::CurrencySymbolBaht => '฿',
Thai::CharacterSaraE => 'เ',
Thai::CharacterSaraAe => 'แ',
Thai::CharacterSaraO => 'โ',
Thai::CharacterSaraAiMaimuan => 'ใ',
Thai::CharacterSaraAiMaimalai => 'ไ',
Thai::CharacterLakkhangyao => 'ๅ',
Thai::CharacterMaiyamok => 'ๆ',
Thai::CharacterMaitaikhu => '็',
Thai::CharacterMaiEk => '่',
Thai::CharacterMaiTho => '้',
Thai::CharacterMaiTri => '๊',
Thai::CharacterMaiChattawa => '๋',
Thai::CharacterThanthakhat => '์',
Thai::CharacterNikhahit => 'ํ',
Thai::CharacterYamakkan => '๎',
Thai::CharacterFongman => '๏',
Thai::DigitZero => '๐',
Thai::DigitOne => '๑',
Thai::DigitTwo => '๒',
Thai::DigitThree => '๓',
Thai::DigitFour => '๔',
Thai::DigitFive => '๕',
Thai::DigitSix => '๖',
Thai::DigitSeven => '๗',
Thai::DigitEight => '๘',
Thai::DigitNine => '๙',
Thai::CharacterAngkhankhu => '๚',
Thai::CharacterKhomut => '๛',
}
}
}
impl std::convert::TryFrom<char> for Thai {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ก' => Ok(Thai::CharacterKoKai),
'ข' => Ok(Thai::CharacterKhoKhai),
'ฃ' => Ok(Thai::CharacterKhoKhuat),
'ค' => Ok(Thai::CharacterKhoKhwai),
'ฅ' => Ok(Thai::CharacterKhoKhon),
'ฆ' => Ok(Thai::CharacterKhoRakhang),
'ง' => Ok(Thai::CharacterNgoNgu),
'จ' => Ok(Thai::CharacterChoChan),
'ฉ' => Ok(Thai::CharacterChoChing),
'ช' => Ok(Thai::CharacterChoChang),
'ซ' => Ok(Thai::CharacterSoSo),
'ฌ' => Ok(Thai::CharacterChoChoe),
'ญ' => Ok(Thai::CharacterYoYing),
'ฎ' => Ok(Thai::CharacterDoChada),
'ฏ' => Ok(Thai::CharacterToPatak),
'ฐ' => Ok(Thai::CharacterThoThan),
'ฑ' => Ok(Thai::CharacterThoNangmontho),
'ฒ' => Ok(Thai::CharacterThoPhuthao),
'ณ' => Ok(Thai::CharacterNoNen),
'ด' => Ok(Thai::CharacterDoDek),
'ต' => Ok(Thai::CharacterToTao),
'ถ' => Ok(Thai::CharacterThoThung),
'ท' => Ok(Thai::CharacterThoThahan),
'ธ' => Ok(Thai::CharacterThoThong),
'น' => Ok(Thai::CharacterNoNu),
'บ' => Ok(Thai::CharacterBoBaimai),
'ป' => Ok(Thai::CharacterPoPla),
'ผ' => Ok(Thai::CharacterPhoPhung),
'ฝ' => Ok(Thai::CharacterFoFa),
'พ' => Ok(Thai::CharacterPhoPhan),
'ฟ' => Ok(Thai::CharacterFoFan),
'ภ' => Ok(Thai::CharacterPhoSamphao),
'ม' => Ok(Thai::CharacterMoMa),
'ย' => Ok(Thai::CharacterYoYak),
'ร' => Ok(Thai::CharacterRoRua),
'ฤ' => Ok(Thai::CharacterRu),
'ล' => Ok(Thai::CharacterLoLing),
'ฦ' => Ok(Thai::CharacterLu),
'ว' => Ok(Thai::CharacterWoWaen),
'ศ' => Ok(Thai::CharacterSoSala),
'ษ' => Ok(Thai::CharacterSoRusi),
'ส' => Ok(Thai::CharacterSoSua),
'ห' => Ok(Thai::CharacterHoHip),
'ฬ' => Ok(Thai::CharacterLoChula),
'อ' => Ok(Thai::CharacterOAng),
'ฮ' => Ok(Thai::CharacterHoNokhuk),
'ฯ' => Ok(Thai::CharacterPaiyannoi),
'ะ' => Ok(Thai::CharacterSaraA),
'ั' => Ok(Thai::CharacterMaiHanDashAkat),
'า' => Ok(Thai::CharacterSaraAa),
'ำ' => Ok(Thai::CharacterSaraAm),
'ิ' => Ok(Thai::CharacterSaraI),
'ี' => Ok(Thai::CharacterSaraIi),
'ึ' => Ok(Thai::CharacterSaraUe),
'ื' => Ok(Thai::CharacterSaraUee),
'ุ' => Ok(Thai::CharacterSaraU),
'ู' => Ok(Thai::CharacterSaraUu),
'ฺ' => Ok(Thai::CharacterPhinthu),
'฿' => Ok(Thai::CurrencySymbolBaht),
'เ' => Ok(Thai::CharacterSaraE),
'แ' => Ok(Thai::CharacterSaraAe),
'โ' => Ok(Thai::CharacterSaraO),
'ใ' => Ok(Thai::CharacterSaraAiMaimuan),
'ไ' => Ok(Thai::CharacterSaraAiMaimalai),
'ๅ' => Ok(Thai::CharacterLakkhangyao),
'ๆ' => Ok(Thai::CharacterMaiyamok),
'็' => Ok(Thai::CharacterMaitaikhu),
'่' => Ok(Thai::CharacterMaiEk),
'้' => Ok(Thai::CharacterMaiTho),
'๊' => Ok(Thai::CharacterMaiTri),
'๋' => Ok(Thai::CharacterMaiChattawa),
'์' => Ok(Thai::CharacterThanthakhat),
'ํ' => Ok(Thai::CharacterNikhahit),
'๎' => Ok(Thai::CharacterYamakkan),
'๏' => Ok(Thai::CharacterFongman),
'๐' => Ok(Thai::DigitZero),
'๑' => Ok(Thai::DigitOne),
'๒' => Ok(Thai::DigitTwo),
'๓' => Ok(Thai::DigitThree),
'๔' => Ok(Thai::DigitFour),
'๕' => Ok(Thai::DigitFive),
'๖' => Ok(Thai::DigitSix),
'๗' => Ok(Thai::DigitSeven),
'๘' => Ok(Thai::DigitEight),
'๙' => Ok(Thai::DigitNine),
'๚' => Ok(Thai::CharacterAngkhankhu),
'๛' => Ok(Thai::CharacterKhomut),
_ => Err(()),
}
}
}
impl Into<u32> for Thai {
fn into(self) -> u32 {
let c: char = self.into();
let hex = c
.escape_unicode()
.to_string()
.replace("\\u{", "")
.replace("}", "");
u32::from_str_radix(&hex, 16).unwrap()
}
}
impl std::convert::TryFrom<u32> for Thai {
type Error = ();
fn try_from(u: u32) -> Result<Self, Self::Error> {
if let Ok(c) = char::try_from(u) {
Self::try_from(c)
} else {
Err(())
}
}
}
impl Iterator for Thai {
type Item = Self;
fn next(&mut self) -> Option<Self> {
let index: u32 = (*self).into();
use std::convert::TryFrom;
Self::try_from(index + 1).ok()
}
}
impl Thai {
pub fn new() -> Self {
Thai::CharacterKoKai
}
pub fn name(&self) -> String {
let s = std::format!("Thai{:#?}", self);
string_morph::to_sentence_case(&s)
}
}