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 Gurmukhi block.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Gurmukhi {
    /// \u{a01}: 'ਁ'
    SignAdakBindi,
    /// \u{a02}: 'ਂ'
    SignBindi,
    /// \u{a03}: 'ਃ'
    SignVisarga,
    /// \u{a05}: 'ਅ'
    LetterA,
    /// \u{a06}: 'ਆ'
    LetterAa,
    /// \u{a07}: 'ਇ'
    LetterI,
    /// \u{a08}: 'ਈ'
    LetterIi,
    /// \u{a09}: 'ਉ'
    LetterU,
    /// \u{a0a}: 'ਊ'
    LetterUu,
    /// \u{a0f}: 'ਏ'
    LetterEe,
    /// \u{a10}: 'ਐ'
    LetterAi,
    /// \u{a13}: 'ਓ'
    LetterOo,
    /// \u{a14}: 'ਔ'
    LetterAu,
    /// \u{a15}: 'ਕ'
    LetterKa,
    /// \u{a16}: 'ਖ'
    LetterKha,
    /// \u{a17}: 'ਗ'
    LetterGa,
    /// \u{a18}: 'ਘ'
    LetterGha,
    /// \u{a19}: 'ਙ'
    LetterNga,
    /// \u{a1a}: 'ਚ'
    LetterCa,
    /// \u{a1b}: 'ਛ'
    LetterCha,
    /// \u{a1c}: 'ਜ'
    LetterJa,
    /// \u{a1d}: 'ਝ'
    LetterJha,
    /// \u{a1e}: 'ਞ'
    LetterNya,
    /// \u{a1f}: 'ਟ'
    LetterTta,
    /// \u{a20}: 'ਠ'
    LetterTtha,
    /// \u{a21}: 'ਡ'
    LetterDda,
    /// \u{a22}: 'ਢ'
    LetterDdha,
    /// \u{a23}: 'ਣ'
    LetterNna,
    /// \u{a24}: 'ਤ'
    LetterTa,
    /// \u{a25}: 'ਥ'
    LetterTha,
    /// \u{a26}: 'ਦ'
    LetterDa,
    /// \u{a27}: 'ਧ'
    LetterDha,
    /// \u{a28}: 'ਨ'
    LetterNa,
    /// \u{a2a}: 'ਪ'
    LetterPa,
    /// \u{a2b}: 'ਫ'
    LetterPha,
    /// \u{a2c}: 'ਬ'
    LetterBa,
    /// \u{a2d}: 'ਭ'
    LetterBha,
    /// \u{a2e}: 'ਮ'
    LetterMa,
    /// \u{a2f}: 'ਯ'
    LetterYa,
    /// \u{a30}: 'ਰ'
    LetterRa,
    /// \u{a32}: 'ਲ'
    LetterLa,
    /// \u{a33}: 'ਲ਼'
    LetterLla,
    /// \u{a35}: 'ਵ'
    LetterVa,
    /// \u{a36}: 'ਸ਼'
    LetterSha,
    /// \u{a38}: 'ਸ'
    LetterSa,
    /// \u{a39}: 'ਹ'
    LetterHa,
    /// \u{a3c}: '਼'
    SignNukta,
    /// \u{a3e}: 'ਾ'
    VowelSignAa,
    /// \u{a3f}: 'ਿ'
    VowelSignI,
    /// \u{a40}: 'ੀ'
    VowelSignIi,
    /// \u{a41}: 'ੁ'
    VowelSignU,
    /// \u{a42}: 'ੂ'
    VowelSignUu,
    /// \u{a47}: 'ੇ'
    VowelSignEe,
    /// \u{a48}: 'ੈ'
    VowelSignAi,
    /// \u{a4b}: 'ੋ'
    VowelSignOo,
    /// \u{a4c}: 'ੌ'
    VowelSignAu,
    /// \u{a4d}: '੍'
    SignVirama,
    /// \u{a51}: 'ੑ'
    SignUdaat,
    /// \u{a59}: 'ਖ਼'
    LetterKhha,
    /// \u{a5a}: 'ਗ਼'
    LetterGhha,
    /// \u{a5b}: 'ਜ਼'
    LetterZa,
    /// \u{a5c}: 'ੜ'
    LetterRra,
    /// \u{a5e}: 'ਫ਼'
    LetterFa,
    /// \u{a66}: '੦'
    DigitZero,
    /// \u{a67}: '੧'
    DigitOne,
    /// \u{a68}: '੨'
    DigitTwo,
    /// \u{a69}: '੩'
    DigitThree,
    /// \u{a6a}: '੪'
    DigitFour,
    /// \u{a6b}: '੫'
    DigitFive,
    /// \u{a6c}: '੬'
    DigitSix,
    /// \u{a6d}: '੭'
    DigitSeven,
    /// \u{a6e}: '੮'
    DigitEight,
    /// \u{a6f}: '੯'
    DigitNine,
    /// \u{a70}: 'ੰ'
    Tippi,
    /// \u{a71}: 'ੱ'
    Addak,
    /// \u{a72}: 'ੲ'
    Iri,
    /// \u{a73}: 'ੳ'
    Ura,
    /// \u{a74}: 'ੴ'
    EkOnkar,
    /// \u{a75}: 'ੵ'
    SignYakash,
    /// \u{a76}: '੶'
    AbbreviationSign,
}

impl Into<char> for Gurmukhi {
    fn into(self) -> char {
        match self {
            Gurmukhi::SignAdakBindi => '',
            Gurmukhi::SignBindi => '',
            Gurmukhi::SignVisarga => '',
            Gurmukhi::LetterA => '',
            Gurmukhi::LetterAa => '',
            Gurmukhi::LetterI => '',
            Gurmukhi::LetterIi => '',
            Gurmukhi::LetterU => '',
            Gurmukhi::LetterUu => '',
            Gurmukhi::LetterEe => '',
            Gurmukhi::LetterAi => '',
            Gurmukhi::LetterOo => '',
            Gurmukhi::LetterAu => '',
            Gurmukhi::LetterKa => '',
            Gurmukhi::LetterKha => '',
            Gurmukhi::LetterGa => '',
            Gurmukhi::LetterGha => '',
            Gurmukhi::LetterNga => '',
            Gurmukhi::LetterCa => '',
            Gurmukhi::LetterCha => '',
            Gurmukhi::LetterJa => '',
            Gurmukhi::LetterJha => '',
            Gurmukhi::LetterNya => '',
            Gurmukhi::LetterTta => '',
            Gurmukhi::LetterTtha => '',
            Gurmukhi::LetterDda => '',
            Gurmukhi::LetterDdha => '',
            Gurmukhi::LetterNna => '',
            Gurmukhi::LetterTa => '',
            Gurmukhi::LetterTha => '',
            Gurmukhi::LetterDa => '',
            Gurmukhi::LetterDha => '',
            Gurmukhi::LetterNa => '',
            Gurmukhi::LetterPa => '',
            Gurmukhi::LetterPha => '',
            Gurmukhi::LetterBa => '',
            Gurmukhi::LetterBha => '',
            Gurmukhi::LetterMa => '',
            Gurmukhi::LetterYa => '',
            Gurmukhi::LetterRa => '',
            Gurmukhi::LetterLa => '',
            Gurmukhi::LetterLla => '',
            Gurmukhi::LetterVa => '',
            Gurmukhi::LetterSha => '',
            Gurmukhi::LetterSa => '',
            Gurmukhi::LetterHa => '',
            Gurmukhi::SignNukta => '',
            Gurmukhi::VowelSignAa => '',
            Gurmukhi::VowelSignI => 'ਿ',
            Gurmukhi::VowelSignIi => '',
            Gurmukhi::VowelSignU => '',
            Gurmukhi::VowelSignUu => '',
            Gurmukhi::VowelSignEe => '',
            Gurmukhi::VowelSignAi => '',
            Gurmukhi::VowelSignOo => '',
            Gurmukhi::VowelSignAu => '',
            Gurmukhi::SignVirama => '',
            Gurmukhi::SignUdaat => '',
            Gurmukhi::LetterKhha => '',
            Gurmukhi::LetterGhha => '',
            Gurmukhi::LetterZa => '',
            Gurmukhi::LetterRra => '',
            Gurmukhi::LetterFa => '',
            Gurmukhi::DigitZero => '',
            Gurmukhi::DigitOne => '',
            Gurmukhi::DigitTwo => '',
            Gurmukhi::DigitThree => '',
            Gurmukhi::DigitFour => '',
            Gurmukhi::DigitFive => '',
            Gurmukhi::DigitSix => '',
            Gurmukhi::DigitSeven => '',
            Gurmukhi::DigitEight => '',
            Gurmukhi::DigitNine => '',
            Gurmukhi::Tippi => '',
            Gurmukhi::Addak => '',
            Gurmukhi::Iri => '',
            Gurmukhi::Ura => '',
            Gurmukhi::EkOnkar => '',
            Gurmukhi::SignYakash => '',
            Gurmukhi::AbbreviationSign => '',
        }
    }
}

impl std::convert::TryFrom<char> for Gurmukhi {
    type Error = ();
    fn try_from(c: char) -> Result<Self, Self::Error> {
        match c {
            '' => Ok(Gurmukhi::SignAdakBindi),
            '' => Ok(Gurmukhi::SignBindi),
            '' => Ok(Gurmukhi::SignVisarga),
            '' => Ok(Gurmukhi::LetterA),
            '' => Ok(Gurmukhi::LetterAa),
            '' => Ok(Gurmukhi::LetterI),
            '' => Ok(Gurmukhi::LetterIi),
            '' => Ok(Gurmukhi::LetterU),
            '' => Ok(Gurmukhi::LetterUu),
            '' => Ok(Gurmukhi::LetterEe),
            '' => Ok(Gurmukhi::LetterAi),
            '' => Ok(Gurmukhi::LetterOo),
            '' => Ok(Gurmukhi::LetterAu),
            '' => Ok(Gurmukhi::LetterKa),
            '' => Ok(Gurmukhi::LetterKha),
            '' => Ok(Gurmukhi::LetterGa),
            '' => Ok(Gurmukhi::LetterGha),
            '' => Ok(Gurmukhi::LetterNga),
            '' => Ok(Gurmukhi::LetterCa),
            '' => Ok(Gurmukhi::LetterCha),
            '' => Ok(Gurmukhi::LetterJa),
            '' => Ok(Gurmukhi::LetterJha),
            '' => Ok(Gurmukhi::LetterNya),
            '' => Ok(Gurmukhi::LetterTta),
            '' => Ok(Gurmukhi::LetterTtha),
            '' => Ok(Gurmukhi::LetterDda),
            '' => Ok(Gurmukhi::LetterDdha),
            '' => Ok(Gurmukhi::LetterNna),
            '' => Ok(Gurmukhi::LetterTa),
            '' => Ok(Gurmukhi::LetterTha),
            '' => Ok(Gurmukhi::LetterDa),
            '' => Ok(Gurmukhi::LetterDha),
            '' => Ok(Gurmukhi::LetterNa),
            '' => Ok(Gurmukhi::LetterPa),
            '' => Ok(Gurmukhi::LetterPha),
            '' => Ok(Gurmukhi::LetterBa),
            '' => Ok(Gurmukhi::LetterBha),
            '' => Ok(Gurmukhi::LetterMa),
            '' => Ok(Gurmukhi::LetterYa),
            '' => Ok(Gurmukhi::LetterRa),
            '' => Ok(Gurmukhi::LetterLa),
            '' => Ok(Gurmukhi::LetterLla),
            '' => Ok(Gurmukhi::LetterVa),
            '' => Ok(Gurmukhi::LetterSha),
            '' => Ok(Gurmukhi::LetterSa),
            '' => Ok(Gurmukhi::LetterHa),
            '' => Ok(Gurmukhi::SignNukta),
            '' => Ok(Gurmukhi::VowelSignAa),
            'ਿ' => Ok(Gurmukhi::VowelSignI),
            '' => Ok(Gurmukhi::VowelSignIi),
            '' => Ok(Gurmukhi::VowelSignU),
            '' => Ok(Gurmukhi::VowelSignUu),
            '' => Ok(Gurmukhi::VowelSignEe),
            '' => Ok(Gurmukhi::VowelSignAi),
            '' => Ok(Gurmukhi::VowelSignOo),
            '' => Ok(Gurmukhi::VowelSignAu),
            '' => Ok(Gurmukhi::SignVirama),
            '' => Ok(Gurmukhi::SignUdaat),
            '' => Ok(Gurmukhi::LetterKhha),
            '' => Ok(Gurmukhi::LetterGhha),
            '' => Ok(Gurmukhi::LetterZa),
            '' => Ok(Gurmukhi::LetterRra),
            '' => Ok(Gurmukhi::LetterFa),
            '' => Ok(Gurmukhi::DigitZero),
            '' => Ok(Gurmukhi::DigitOne),
            '' => Ok(Gurmukhi::DigitTwo),
            '' => Ok(Gurmukhi::DigitThree),
            '' => Ok(Gurmukhi::DigitFour),
            '' => Ok(Gurmukhi::DigitFive),
            '' => Ok(Gurmukhi::DigitSix),
            '' => Ok(Gurmukhi::DigitSeven),
            '' => Ok(Gurmukhi::DigitEight),
            '' => Ok(Gurmukhi::DigitNine),
            '' => Ok(Gurmukhi::Tippi),
            '' => Ok(Gurmukhi::Addak),
            '' => Ok(Gurmukhi::Iri),
            '' => Ok(Gurmukhi::Ura),
            '' => Ok(Gurmukhi::EkOnkar),
            '' => Ok(Gurmukhi::SignYakash),
            '' => Ok(Gurmukhi::AbbreviationSign),
            _ => Err(()),
        }
    }
}

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

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