unicode_types 0.2.0

A mapping of all the unicode characters into convenience types (one enum per block of characters with one variant per character).
Documentation

/// An enum to represent all characters in the Lao block.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Lao {
    /// \u{e81}: 'ກ'
    LetterKo,
    /// \u{e82}: 'ຂ'
    LetterKhoSung,
    /// \u{e84}: 'ຄ'
    LetterKhoTam,
    /// \u{e86}: 'ຆ'
    LetterPaliGha,
    /// \u{e87}: 'ງ'
    LetterNgo,
    /// \u{e88}: 'ຈ'
    LetterCo,
    /// \u{e89}: 'ຉ'
    LetterPaliCha,
    /// \u{e8a}: 'ຊ'
    LetterSoTam,
    /// \u{e8c}: 'ຌ'
    LetterPaliJha,
    /// \u{e8d}: 'ຍ'
    LetterNyo,
    /// \u{e8e}: 'ຎ'
    LetterPaliNya,
    /// \u{e8f}: 'ຏ'
    LetterPaliTta,
    /// \u{e90}: 'ຐ'
    LetterPaliTtha,
    /// \u{e91}: 'ຑ'
    LetterPaliDda,
    /// \u{e92}: 'ຒ'
    LetterPaliDdha,
    /// \u{e93}: 'ຓ'
    LetterPaliNna,
    /// \u{e94}: 'ດ'
    LetterDo,
    /// \u{e95}: 'ຕ'
    LetterTo,
    /// \u{e96}: 'ຖ'
    LetterThoSung,
    /// \u{e97}: 'ທ'
    LetterThoTam,
    /// \u{e98}: 'ຘ'
    LetterPaliDha,
    /// \u{e99}: 'ນ'
    LetterNo,
    /// \u{e9a}: 'ບ'
    LetterBo,
    /// \u{e9b}: 'ປ'
    LetterPo,
    /// \u{e9c}: 'ຜ'
    LetterPhoSung,
    /// \u{e9d}: 'ຝ'
    LetterFoTam,
    /// \u{e9e}: 'ພ'
    LetterPhoTam,
    /// \u{e9f}: 'ຟ'
    LetterFoSung,
    /// \u{ea0}: 'ຠ'
    LetterPaliBha,
    /// \u{ea1}: 'ມ'
    LetterMo,
    /// \u{ea2}: 'ຢ'
    LetterYo,
    /// \u{ea3}: 'ຣ'
    LetterLoLing,
    /// \u{ea5}: 'ລ'
    LetterLoLoot,
    /// \u{ea7}: 'ວ'
    LetterWo,
    /// \u{ea8}: 'ຨ'
    LetterSanskritSha,
    /// \u{ea9}: 'ຩ'
    LetterSanskritSsa,
    /// \u{eaa}: 'ສ'
    LetterSoSung,
    /// \u{eab}: 'ຫ'
    LetterHoSung,
    /// \u{eac}: 'ຬ'
    LetterPaliLla,
    /// \u{ead}: 'ອ'
    LetterO,
    /// \u{eae}: 'ຮ'
    LetterHoTam,
    /// \u{eaf}: 'ຯ'
    Ellipsis,
    /// \u{eb0}: 'ະ'
    VowelSignA,
    /// \u{eb1}: 'ັ'
    VowelSignMaiKan,
    /// \u{eb2}: 'າ'
    VowelSignAa,
    /// \u{eb3}: 'ຳ'
    VowelSignAm,
    /// \u{eb4}: 'ິ'
    VowelSignI,
    /// \u{eb5}: 'ີ'
    VowelSignIi,
    /// \u{eb6}: 'ຶ'
    VowelSignY,
    /// \u{eb7}: 'ື'
    VowelSignYy,
    /// \u{eb8}: 'ຸ'
    VowelSignU,
    /// \u{eb9}: 'ູ'
    VowelSignUu,
    /// \u{eba}: '຺'
    SignPaliVirama,
    /// \u{ebb}: 'ົ'
    VowelSignMaiKon,
    /// \u{ebc}: 'ຼ'
    SemivowelSignLo,
    /// \u{ebd}: 'ຽ'
    SemivowelSignNyo,
    /// \u{ec0}: 'ເ'
    VowelSignE,
    /// \u{ec1}: 'ແ'
    VowelSignEi,
    /// \u{ec2}: 'ໂ'
    VowelSignO,
    /// \u{ec3}: 'ໃ'
    VowelSignAy,
    /// \u{ec4}: 'ໄ'
    VowelSignAi,
    /// \u{ec6}: 'ໆ'
    KoLa,
    /// \u{ec8}: '່'
    ToneMaiEk,
    /// \u{ec9}: '້'
    ToneMaiTho,
    /// \u{eca}: '໊'
    ToneMaiTi,
    /// \u{ecb}: '໋'
    ToneMaiCatawa,
    /// \u{ecc}: '໌'
    CancellationMark,
    /// \u{ecd}: 'ໍ'
    Niggahita,
    /// \u{ed0}: '໐'
    DigitZero,
    /// \u{ed1}: '໑'
    DigitOne,
    /// \u{ed2}: '໒'
    DigitTwo,
    /// \u{ed3}: '໓'
    DigitThree,
    /// \u{ed4}: '໔'
    DigitFour,
    /// \u{ed5}: '໕'
    DigitFive,
    /// \u{ed6}: '໖'
    DigitSix,
    /// \u{ed7}: '໗'
    DigitSeven,
    /// \u{ed8}: '໘'
    DigitEight,
    /// \u{ed9}: '໙'
    DigitNine,
    /// \u{edc}: 'ໜ'
    HoNo,
    /// \u{edd}: 'ໝ'
    HoMo,
    /// \u{ede}: 'ໞ'
    LetterKhmuGo,
    /// \u{edf}: 'ໟ'
    LetterKhmuNyo,
}

impl Into<char> for Lao {
    fn into(self) -> char {
        match self {
            Lao::LetterKo => '',
            Lao::LetterKhoSung => '',
            Lao::LetterKhoTam => '',
            Lao::LetterPaliGha => '',
            Lao::LetterNgo => '',
            Lao::LetterCo => '',
            Lao::LetterPaliCha => '',
            Lao::LetterSoTam => '',
            Lao::LetterPaliJha => '',
            Lao::LetterNyo => '',
            Lao::LetterPaliNya => '',
            Lao::LetterPaliTta => '',
            Lao::LetterPaliTtha => '',
            Lao::LetterPaliDda => '',
            Lao::LetterPaliDdha => '',
            Lao::LetterPaliNna => '',
            Lao::LetterDo => '',
            Lao::LetterTo => '',
            Lao::LetterThoSung => '',
            Lao::LetterThoTam => '',
            Lao::LetterPaliDha => '',
            Lao::LetterNo => '',
            Lao::LetterBo => '',
            Lao::LetterPo => '',
            Lao::LetterPhoSung => '',
            Lao::LetterFoTam => '',
            Lao::LetterPhoTam => '',
            Lao::LetterFoSung => '',
            Lao::LetterPaliBha => '',
            Lao::LetterMo => '',
            Lao::LetterYo => '',
            Lao::LetterLoLing => '',
            Lao::LetterLoLoot => '',
            Lao::LetterWo => '',
            Lao::LetterSanskritSha => '',
            Lao::LetterSanskritSsa => '',
            Lao::LetterSoSung => '',
            Lao::LetterHoSung => '',
            Lao::LetterPaliLla => '',
            Lao::LetterO => '',
            Lao::LetterHoTam => '',
            Lao::Ellipsis => '',
            Lao::VowelSignA => '',
            Lao::VowelSignMaiKan => '',
            Lao::VowelSignAa => '',
            Lao::VowelSignAm => '',
            Lao::VowelSignI => '',
            Lao::VowelSignIi => '',
            Lao::VowelSignY => '',
            Lao::VowelSignYy => '',
            Lao::VowelSignU => '',
            Lao::VowelSignUu => '',
            Lao::SignPaliVirama => '',
            Lao::VowelSignMaiKon => '',
            Lao::SemivowelSignLo => '',
            Lao::SemivowelSignNyo => '',
            Lao::VowelSignE => '',
            Lao::VowelSignEi => '',
            Lao::VowelSignO => '',
            Lao::VowelSignAy => '',
            Lao::VowelSignAi => '',
            Lao::KoLa => '',
            Lao::ToneMaiEk => '',
            Lao::ToneMaiTho => '',
            Lao::ToneMaiTi => '',
            Lao::ToneMaiCatawa => '',
            Lao::CancellationMark => '',
            Lao::Niggahita => '',
            Lao::DigitZero => '',
            Lao::DigitOne => '',
            Lao::DigitTwo => '',
            Lao::DigitThree => '',
            Lao::DigitFour => '',
            Lao::DigitFive => '',
            Lao::DigitSix => '',
            Lao::DigitSeven => '',
            Lao::DigitEight => '',
            Lao::DigitNine => '',
            Lao::HoNo => '',
            Lao::HoMo => '',
            Lao::LetterKhmuGo => '',
            Lao::LetterKhmuNyo => '',
        }
    }
}

impl std::convert::TryFrom<char> for Lao {
    type Error = ();
    fn try_from(c: char) -> Result<Self, Self::Error> {
        match c {
            '' => Ok(Lao::LetterKo),
            '' => Ok(Lao::LetterKhoSung),
            '' => Ok(Lao::LetterKhoTam),
            '' => Ok(Lao::LetterPaliGha),
            '' => Ok(Lao::LetterNgo),
            '' => Ok(Lao::LetterCo),
            '' => Ok(Lao::LetterPaliCha),
            '' => Ok(Lao::LetterSoTam),
            '' => Ok(Lao::LetterPaliJha),
            '' => Ok(Lao::LetterNyo),
            '' => Ok(Lao::LetterPaliNya),
            '' => Ok(Lao::LetterPaliTta),
            '' => Ok(Lao::LetterPaliTtha),
            '' => Ok(Lao::LetterPaliDda),
            '' => Ok(Lao::LetterPaliDdha),
            '' => Ok(Lao::LetterPaliNna),
            '' => Ok(Lao::LetterDo),
            '' => Ok(Lao::LetterTo),
            '' => Ok(Lao::LetterThoSung),
            '' => Ok(Lao::LetterThoTam),
            '' => Ok(Lao::LetterPaliDha),
            '' => Ok(Lao::LetterNo),
            '' => Ok(Lao::LetterBo),
            '' => Ok(Lao::LetterPo),
            '' => Ok(Lao::LetterPhoSung),
            '' => Ok(Lao::LetterFoTam),
            '' => Ok(Lao::LetterPhoTam),
            '' => Ok(Lao::LetterFoSung),
            '' => Ok(Lao::LetterPaliBha),
            '' => Ok(Lao::LetterMo),
            '' => Ok(Lao::LetterYo),
            '' => Ok(Lao::LetterLoLing),
            '' => Ok(Lao::LetterLoLoot),
            '' => Ok(Lao::LetterWo),
            '' => Ok(Lao::LetterSanskritSha),
            '' => Ok(Lao::LetterSanskritSsa),
            '' => Ok(Lao::LetterSoSung),
            '' => Ok(Lao::LetterHoSung),
            '' => Ok(Lao::LetterPaliLla),
            '' => Ok(Lao::LetterO),
            '' => Ok(Lao::LetterHoTam),
            '' => Ok(Lao::Ellipsis),
            '' => Ok(Lao::VowelSignA),
            '' => Ok(Lao::VowelSignMaiKan),
            '' => Ok(Lao::VowelSignAa),
            '' => Ok(Lao::VowelSignAm),
            '' => Ok(Lao::VowelSignI),
            '' => Ok(Lao::VowelSignIi),
            '' => Ok(Lao::VowelSignY),
            '' => Ok(Lao::VowelSignYy),
            '' => Ok(Lao::VowelSignU),
            '' => Ok(Lao::VowelSignUu),
            '' => Ok(Lao::SignPaliVirama),
            '' => Ok(Lao::VowelSignMaiKon),
            '' => Ok(Lao::SemivowelSignLo),
            '' => Ok(Lao::SemivowelSignNyo),
            '' => Ok(Lao::VowelSignE),
            '' => Ok(Lao::VowelSignEi),
            '' => Ok(Lao::VowelSignO),
            '' => Ok(Lao::VowelSignAy),
            '' => Ok(Lao::VowelSignAi),
            '' => Ok(Lao::KoLa),
            '' => Ok(Lao::ToneMaiEk),
            '' => Ok(Lao::ToneMaiTho),
            '' => Ok(Lao::ToneMaiTi),
            '' => Ok(Lao::ToneMaiCatawa),
            '' => Ok(Lao::CancellationMark),
            '' => Ok(Lao::Niggahita),
            '' => Ok(Lao::DigitZero),
            '' => Ok(Lao::DigitOne),
            '' => Ok(Lao::DigitTwo),
            '' => Ok(Lao::DigitThree),
            '' => Ok(Lao::DigitFour),
            '' => Ok(Lao::DigitFive),
            '' => Ok(Lao::DigitSix),
            '' => Ok(Lao::DigitSeven),
            '' => Ok(Lao::DigitEight),
            '' => Ok(Lao::DigitNine),
            '' => Ok(Lao::HoNo),
            '' => Ok(Lao::HoMo),
            '' => Ok(Lao::LetterKhmuGo),
            '' => Ok(Lao::LetterKhmuNyo),
            _ => Err(()),
        }
    }
}

impl Into<u32> for Lao {
    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 Lao {
    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 Lao {
    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 Lao {
    /// The character with the lowest index in this unicode block
    pub fn new() -> Self {
        Lao::LetterKo
    }

    /// The character's name, in sentence case
    pub fn name(&self) -> String {
        let s = std::format!("Lao{:#?}", self);
        string_morph::to_sentence_case(&s)
    }
}