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 Tamil block.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Tamil {
    /// \u{b82}: 'ஂ'
    SignAnusvara,
    /// \u{b83}: 'ஃ'
    SignVisarga,
    /// \u{b85}: 'அ'
    LetterA,
    /// \u{b86}: 'ஆ'
    LetterAa,
    /// \u{b87}: 'இ'
    LetterI,
    /// \u{b88}: 'ஈ'
    LetterIi,
    /// \u{b89}: 'உ'
    LetterU,
    /// \u{b8a}: 'ஊ'
    LetterUu,
    /// \u{b8e}: 'எ'
    LetterE,
    /// \u{b8f}: 'ஏ'
    LetterEe,
    /// \u{b90}: 'ஐ'
    LetterAi,
    /// \u{b92}: 'ஒ'
    LetterO,
    /// \u{b93}: 'ஓ'
    LetterOo,
    /// \u{b94}: 'ஔ'
    LetterAu,
    /// \u{b95}: 'க'
    LetterKa,
    /// \u{b99}: 'ங'
    LetterNga,
    /// \u{b9a}: 'ச'
    LetterCa,
    /// \u{b9c}: 'ஜ'
    LetterJa,
    /// \u{b9e}: 'ஞ'
    LetterNya,
    /// \u{b9f}: 'ட'
    LetterTta,
    /// \u{ba3}: 'ண'
    LetterNna,
    /// \u{ba4}: 'த'
    LetterTa,
    /// \u{ba8}: 'ந'
    LetterNa,
    /// \u{ba9}: 'ன'
    LetterNnna,
    /// \u{baa}: 'ப'
    LetterPa,
    /// \u{bae}: 'ம'
    LetterMa,
    /// \u{baf}: 'ய'
    LetterYa,
    /// \u{bb0}: 'ர'
    LetterRa,
    /// \u{bb1}: 'ற'
    LetterRra,
    /// \u{bb2}: 'ல'
    LetterLa,
    /// \u{bb3}: 'ள'
    LetterLla,
    /// \u{bb4}: 'ழ'
    LetterLlla,
    /// \u{bb5}: 'வ'
    LetterVa,
    /// \u{bb6}: 'ஶ'
    LetterSha,
    /// \u{bb7}: 'ஷ'
    LetterSsa,
    /// \u{bb8}: 'ஸ'
    LetterSa,
    /// \u{bb9}: 'ஹ'
    LetterHa,
    /// \u{bbe}: 'ா'
    VowelSignAa,
    /// \u{bbf}: 'ி'
    VowelSignI,
    /// \u{bc0}: 'ீ'
    VowelSignIi,
    /// \u{bc1}: 'ு'
    VowelSignU,
    /// \u{bc2}: 'ூ'
    VowelSignUu,
    /// \u{bc6}: 'ெ'
    VowelSignE,
    /// \u{bc7}: 'ே'
    VowelSignEe,
    /// \u{bc8}: 'ை'
    VowelSignAi,
    /// \u{bca}: 'ொ'
    VowelSignO,
    /// \u{bcb}: 'ோ'
    VowelSignOo,
    /// \u{bcc}: 'ௌ'
    VowelSignAu,
    /// \u{bcd}: '்'
    SignVirama,
    /// \u{bd0}: 'ௐ'
    Om,
    /// \u{bd7}: 'ௗ'
    AuLengthMark,
    /// \u{be6}: '௦'
    DigitZero,
    /// \u{be7}: '௧'
    DigitOne,
    /// \u{be8}: '௨'
    DigitTwo,
    /// \u{be9}: '௩'
    DigitThree,
    /// \u{bea}: '௪'
    DigitFour,
    /// \u{beb}: '௫'
    DigitFive,
    /// \u{bec}: '௬'
    DigitSix,
    /// \u{bed}: '௭'
    DigitSeven,
    /// \u{bee}: '௮'
    DigitEight,
    /// \u{bef}: '௯'
    DigitNine,
    /// \u{bf0}: '௰'
    NumberTen,
    /// \u{bf1}: '௱'
    NumberOneHundred,
    /// \u{bf2}: '௲'
    NumberOneThousand,
    /// \u{bf3}: '௳'
    DaySign,
    /// \u{bf4}: '௴'
    MonthSign,
    /// \u{bf5}: '௵'
    YearSign,
    /// \u{bf6}: '௶'
    DebitSign,
    /// \u{bf7}: '௷'
    CreditSign,
    /// \u{bf8}: '௸'
    AsAboveSign,
    /// \u{bf9}: '௹'
    RupeeSign,
    /// \u{bfa}: '௺'
    NumberSign,
}

impl Into<char> for Tamil {
    fn into(self) -> char {
        match self {
            Tamil::SignAnusvara => '',
            Tamil::SignVisarga => '',
            Tamil::LetterA => '',
            Tamil::LetterAa => '',
            Tamil::LetterI => '',
            Tamil::LetterIi => '',
            Tamil::LetterU => '',
            Tamil::LetterUu => '',
            Tamil::LetterE => '',
            Tamil::LetterEe => '',
            Tamil::LetterAi => '',
            Tamil::LetterO => '',
            Tamil::LetterOo => '',
            Tamil::LetterAu => '',
            Tamil::LetterKa => '',
            Tamil::LetterNga => '',
            Tamil::LetterCa => '',
            Tamil::LetterJa => '',
            Tamil::LetterNya => '',
            Tamil::LetterTta => '',
            Tamil::LetterNna => '',
            Tamil::LetterTa => '',
            Tamil::LetterNa => '',
            Tamil::LetterNnna => '',
            Tamil::LetterPa => '',
            Tamil::LetterMa => '',
            Tamil::LetterYa => '',
            Tamil::LetterRa => '',
            Tamil::LetterRra => '',
            Tamil::LetterLa => '',
            Tamil::LetterLla => '',
            Tamil::LetterLlla => '',
            Tamil::LetterVa => '',
            Tamil::LetterSha => '',
            Tamil::LetterSsa => '',
            Tamil::LetterSa => '',
            Tamil::LetterHa => '',
            Tamil::VowelSignAa => '',
            Tamil::VowelSignI => 'ி',
            Tamil::VowelSignIi => '',
            Tamil::VowelSignU => '',
            Tamil::VowelSignUu => '',
            Tamil::VowelSignE => '',
            Tamil::VowelSignEe => '',
            Tamil::VowelSignAi => '',
            Tamil::VowelSignO => '',
            Tamil::VowelSignOo => '',
            Tamil::VowelSignAu => '',
            Tamil::SignVirama => '',
            Tamil::Om => '',
            Tamil::AuLengthMark => '',
            Tamil::DigitZero => '',
            Tamil::DigitOne => '',
            Tamil::DigitTwo => '',
            Tamil::DigitThree => '',
            Tamil::DigitFour => '',
            Tamil::DigitFive => '',
            Tamil::DigitSix => '',
            Tamil::DigitSeven => '',
            Tamil::DigitEight => '',
            Tamil::DigitNine => '',
            Tamil::NumberTen => '',
            Tamil::NumberOneHundred => '',
            Tamil::NumberOneThousand => '',
            Tamil::DaySign => '',
            Tamil::MonthSign => '',
            Tamil::YearSign => '',
            Tamil::DebitSign => '',
            Tamil::CreditSign => '',
            Tamil::AsAboveSign => '',
            Tamil::RupeeSign => '',
            Tamil::NumberSign => '',
        }
    }
}

impl std::convert::TryFrom<char> for Tamil {
    type Error = ();
    fn try_from(c: char) -> Result<Self, Self::Error> {
        match c {
            '' => Ok(Tamil::SignAnusvara),
            '' => Ok(Tamil::SignVisarga),
            '' => Ok(Tamil::LetterA),
            '' => Ok(Tamil::LetterAa),
            '' => Ok(Tamil::LetterI),
            '' => Ok(Tamil::LetterIi),
            '' => Ok(Tamil::LetterU),
            '' => Ok(Tamil::LetterUu),
            '' => Ok(Tamil::LetterE),
            '' => Ok(Tamil::LetterEe),
            '' => Ok(Tamil::LetterAi),
            '' => Ok(Tamil::LetterO),
            '' => Ok(Tamil::LetterOo),
            '' => Ok(Tamil::LetterAu),
            '' => Ok(Tamil::LetterKa),
            '' => Ok(Tamil::LetterNga),
            '' => Ok(Tamil::LetterCa),
            '' => Ok(Tamil::LetterJa),
            '' => Ok(Tamil::LetterNya),
            '' => Ok(Tamil::LetterTta),
            '' => Ok(Tamil::LetterNna),
            '' => Ok(Tamil::LetterTa),
            '' => Ok(Tamil::LetterNa),
            '' => Ok(Tamil::LetterNnna),
            '' => Ok(Tamil::LetterPa),
            '' => Ok(Tamil::LetterMa),
            '' => Ok(Tamil::LetterYa),
            '' => Ok(Tamil::LetterRa),
            '' => Ok(Tamil::LetterRra),
            '' => Ok(Tamil::LetterLa),
            '' => Ok(Tamil::LetterLla),
            '' => Ok(Tamil::LetterLlla),
            '' => Ok(Tamil::LetterVa),
            '' => Ok(Tamil::LetterSha),
            '' => Ok(Tamil::LetterSsa),
            '' => Ok(Tamil::LetterSa),
            '' => Ok(Tamil::LetterHa),
            '' => Ok(Tamil::VowelSignAa),
            'ி' => Ok(Tamil::VowelSignI),
            '' => Ok(Tamil::VowelSignIi),
            '' => Ok(Tamil::VowelSignU),
            '' => Ok(Tamil::VowelSignUu),
            '' => Ok(Tamil::VowelSignE),
            '' => Ok(Tamil::VowelSignEe),
            '' => Ok(Tamil::VowelSignAi),
            '' => Ok(Tamil::VowelSignO),
            '' => Ok(Tamil::VowelSignOo),
            '' => Ok(Tamil::VowelSignAu),
            '' => Ok(Tamil::SignVirama),
            '' => Ok(Tamil::Om),
            '' => Ok(Tamil::AuLengthMark),
            '' => Ok(Tamil::DigitZero),
            '' => Ok(Tamil::DigitOne),
            '' => Ok(Tamil::DigitTwo),
            '' => Ok(Tamil::DigitThree),
            '' => Ok(Tamil::DigitFour),
            '' => Ok(Tamil::DigitFive),
            '' => Ok(Tamil::DigitSix),
            '' => Ok(Tamil::DigitSeven),
            '' => Ok(Tamil::DigitEight),
            '' => Ok(Tamil::DigitNine),
            '' => Ok(Tamil::NumberTen),
            '' => Ok(Tamil::NumberOneHundred),
            '' => Ok(Tamil::NumberOneThousand),
            '' => Ok(Tamil::DaySign),
            '' => Ok(Tamil::MonthSign),
            '' => Ok(Tamil::YearSign),
            '' => Ok(Tamil::DebitSign),
            '' => Ok(Tamil::CreditSign),
            '' => Ok(Tamil::AsAboveSign),
            '' => Ok(Tamil::RupeeSign),
            '' => Ok(Tamil::NumberSign),
            _ => Err(()),
        }
    }
}

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

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