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 Nandinagari block.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Nandinagari {
    /// \u{119a0}: '๐‘ฆ '
    LetterA,
    /// \u{119a1}: '๐‘ฆก'
    LetterAa,
    /// \u{119a2}: '๐‘ฆข'
    LetterI,
    /// \u{119a3}: '๐‘ฆฃ'
    LetterIi,
    /// \u{119a4}: '๐‘ฆค'
    LetterU,
    /// \u{119a5}: '๐‘ฆฅ'
    LetterUu,
    /// \u{119a6}: '๐‘ฆฆ'
    LetterVocalicR,
    /// \u{119a7}: '๐‘ฆง'
    LetterVocalicRr,
    /// \u{119aa}: '๐‘ฆช'
    LetterE,
    /// \u{119ab}: '๐‘ฆซ'
    LetterAi,
    /// \u{119ac}: '๐‘ฆฌ'
    LetterO,
    /// \u{119ad}: '๐‘ฆญ'
    LetterAu,
    /// \u{119ae}: '๐‘ฆฎ'
    LetterKa,
    /// \u{119af}: '๐‘ฆฏ'
    LetterKha,
    /// \u{119b0}: '๐‘ฆฐ'
    LetterGa,
    /// \u{119b1}: '๐‘ฆฑ'
    LetterGha,
    /// \u{119b2}: '๐‘ฆฒ'
    LetterNga,
    /// \u{119b3}: '๐‘ฆณ'
    LetterCa,
    /// \u{119b4}: '๐‘ฆด'
    LetterCha,
    /// \u{119b5}: '๐‘ฆต'
    LetterJa,
    /// \u{119b6}: '๐‘ฆถ'
    LetterJha,
    /// \u{119b7}: '๐‘ฆท'
    LetterNya,
    /// \u{119b8}: '๐‘ฆธ'
    LetterTta,
    /// \u{119b9}: '๐‘ฆน'
    LetterTtha,
    /// \u{119ba}: '๐‘ฆบ'
    LetterDda,
    /// \u{119bb}: '๐‘ฆป'
    LetterDdha,
    /// \u{119bc}: '๐‘ฆผ'
    LetterNna,
    /// \u{119bd}: '๐‘ฆฝ'
    LetterTa,
    /// \u{119be}: '๐‘ฆพ'
    LetterTha,
    /// \u{119bf}: '๐‘ฆฟ'
    LetterDa,
    /// \u{119c0}: '๐‘ง€'
    LetterDha,
    /// \u{119c1}: '๐‘ง'
    LetterNa,
    /// \u{119c2}: '๐‘ง‚'
    LetterPa,
    /// \u{119c3}: '๐‘งƒ'
    LetterPha,
    /// \u{119c4}: '๐‘ง„'
    LetterBa,
    /// \u{119c5}: '๐‘ง…'
    LetterBha,
    /// \u{119c6}: '๐‘ง†'
    LetterMa,
    /// \u{119c7}: '๐‘ง‡'
    LetterYa,
    /// \u{119c8}: '๐‘งˆ'
    LetterRa,
    /// \u{119c9}: '๐‘ง‰'
    LetterLa,
    /// \u{119ca}: '๐‘งŠ'
    LetterVa,
    /// \u{119cb}: '๐‘ง‹'
    LetterSha,
    /// \u{119cc}: '๐‘งŒ'
    LetterSsa,
    /// \u{119cd}: '๐‘ง'
    LetterSa,
    /// \u{119ce}: '๐‘งŽ'
    LetterHa,
    /// \u{119cf}: '๐‘ง'
    LetterLla,
    /// \u{119d0}: '๐‘ง'
    LetterRra,
    /// \u{119d1}: '๐‘ง‘'
    VowelSignAa,
    /// \u{119d2}: '๐‘ง’'
    VowelSignI,
    /// \u{119d3}: '๐‘ง“'
    VowelSignIi,
    /// \u{119d4}: '๐‘ง”'
    VowelSignU,
    /// \u{119d5}: '๐‘ง•'
    VowelSignUu,
    /// \u{119d6}: '๐‘ง–'
    VowelSignVocalicR,
    /// \u{119d7}: '๐‘ง—'
    VowelSignVocalicRr,
    /// \u{119da}: '๐‘งš'
    VowelSignE,
    /// \u{119db}: '๐‘ง›'
    VowelSignAi,
    /// \u{119dc}: '๐‘งœ'
    VowelSignO,
    /// \u{119dd}: '๐‘ง'
    VowelSignAu,
    /// \u{119de}: '๐‘งž'
    SignAnusvara,
    /// \u{119df}: '๐‘งŸ'
    SignVisarga,
    /// \u{119e0}: '๐‘ง '
    SignVirama,
    /// \u{119e1}: '๐‘งก'
    SignAvagraha,
    /// \u{119e2}: '๐‘งข'
    SignSiddham,
    /// \u{119e3}: '๐‘งฃ'
    Headstroke,
    /// \u{119e4}: '๐‘งค'
    VowelSignPrishthamatraE,
}

impl Into<char> for Nandinagari {
    fn into(self) -> char {
        match self {
            Nandinagari::LetterA => '๐‘ฆ ',
            Nandinagari::LetterAa => '๐‘ฆก',
            Nandinagari::LetterI => '๐‘ฆข',
            Nandinagari::LetterIi => '๐‘ฆฃ',
            Nandinagari::LetterU => '๐‘ฆค',
            Nandinagari::LetterUu => '๐‘ฆฅ',
            Nandinagari::LetterVocalicR => '๐‘ฆฆ',
            Nandinagari::LetterVocalicRr => '๐‘ฆง',
            Nandinagari::LetterE => '๐‘ฆช',
            Nandinagari::LetterAi => '๐‘ฆซ',
            Nandinagari::LetterO => '๐‘ฆฌ',
            Nandinagari::LetterAu => '๐‘ฆญ',
            Nandinagari::LetterKa => '๐‘ฆฎ',
            Nandinagari::LetterKha => '๐‘ฆฏ',
            Nandinagari::LetterGa => '๐‘ฆฐ',
            Nandinagari::LetterGha => '๐‘ฆฑ',
            Nandinagari::LetterNga => '๐‘ฆฒ',
            Nandinagari::LetterCa => '๐‘ฆณ',
            Nandinagari::LetterCha => '๐‘ฆด',
            Nandinagari::LetterJa => '๐‘ฆต',
            Nandinagari::LetterJha => '๐‘ฆถ',
            Nandinagari::LetterNya => '๐‘ฆท',
            Nandinagari::LetterTta => '๐‘ฆธ',
            Nandinagari::LetterTtha => '๐‘ฆน',
            Nandinagari::LetterDda => '๐‘ฆบ',
            Nandinagari::LetterDdha => '๐‘ฆป',
            Nandinagari::LetterNna => '๐‘ฆผ',
            Nandinagari::LetterTa => '๐‘ฆฝ',
            Nandinagari::LetterTha => '๐‘ฆพ',
            Nandinagari::LetterDa => '๐‘ฆฟ',
            Nandinagari::LetterDha => '๐‘ง€',
            Nandinagari::LetterNa => '๐‘ง',
            Nandinagari::LetterPa => '๐‘ง‚',
            Nandinagari::LetterPha => '๐‘งƒ',
            Nandinagari::LetterBa => '๐‘ง„',
            Nandinagari::LetterBha => '๐‘ง…',
            Nandinagari::LetterMa => '๐‘ง†',
            Nandinagari::LetterYa => '๐‘ง‡',
            Nandinagari::LetterRa => '๐‘งˆ',
            Nandinagari::LetterLa => '๐‘ง‰',
            Nandinagari::LetterVa => '๐‘งŠ',
            Nandinagari::LetterSha => '๐‘ง‹',
            Nandinagari::LetterSsa => '๐‘งŒ',
            Nandinagari::LetterSa => '๐‘ง',
            Nandinagari::LetterHa => '๐‘งŽ',
            Nandinagari::LetterLla => '๐‘ง',
            Nandinagari::LetterRra => '๐‘ง',
            Nandinagari::VowelSignAa => '๐‘ง‘',
            Nandinagari::VowelSignI => '๐‘ง’',
            Nandinagari::VowelSignIi => '๐‘ง“',
            Nandinagari::VowelSignU => '๐‘ง”',
            Nandinagari::VowelSignUu => '๐‘ง•',
            Nandinagari::VowelSignVocalicR => '๐‘ง–',
            Nandinagari::VowelSignVocalicRr => '๐‘ง—',
            Nandinagari::VowelSignE => '๐‘งš',
            Nandinagari::VowelSignAi => '๐‘ง›',
            Nandinagari::VowelSignO => '๐‘งœ',
            Nandinagari::VowelSignAu => '๐‘ง',
            Nandinagari::SignAnusvara => '๐‘งž',
            Nandinagari::SignVisarga => '๐‘งŸ',
            Nandinagari::SignVirama => '๐‘ง ',
            Nandinagari::SignAvagraha => '๐‘งก',
            Nandinagari::SignSiddham => '๐‘งข',
            Nandinagari::Headstroke => '๐‘งฃ',
            Nandinagari::VowelSignPrishthamatraE => '๐‘งค',
        }
    }
}

impl std::convert::TryFrom<char> for Nandinagari {
    type Error = ();
    fn try_from(c: char) -> Result<Self, Self::Error> {
        match c {
            '๐‘ฆ ' => Ok(Nandinagari::LetterA),
            '๐‘ฆก' => Ok(Nandinagari::LetterAa),
            '๐‘ฆข' => Ok(Nandinagari::LetterI),
            '๐‘ฆฃ' => Ok(Nandinagari::LetterIi),
            '๐‘ฆค' => Ok(Nandinagari::LetterU),
            '๐‘ฆฅ' => Ok(Nandinagari::LetterUu),
            '๐‘ฆฆ' => Ok(Nandinagari::LetterVocalicR),
            '๐‘ฆง' => Ok(Nandinagari::LetterVocalicRr),
            '๐‘ฆช' => Ok(Nandinagari::LetterE),
            '๐‘ฆซ' => Ok(Nandinagari::LetterAi),
            '๐‘ฆฌ' => Ok(Nandinagari::LetterO),
            '๐‘ฆญ' => Ok(Nandinagari::LetterAu),
            '๐‘ฆฎ' => Ok(Nandinagari::LetterKa),
            '๐‘ฆฏ' => Ok(Nandinagari::LetterKha),
            '๐‘ฆฐ' => Ok(Nandinagari::LetterGa),
            '๐‘ฆฑ' => Ok(Nandinagari::LetterGha),
            '๐‘ฆฒ' => Ok(Nandinagari::LetterNga),
            '๐‘ฆณ' => Ok(Nandinagari::LetterCa),
            '๐‘ฆด' => Ok(Nandinagari::LetterCha),
            '๐‘ฆต' => Ok(Nandinagari::LetterJa),
            '๐‘ฆถ' => Ok(Nandinagari::LetterJha),
            '๐‘ฆท' => Ok(Nandinagari::LetterNya),
            '๐‘ฆธ' => Ok(Nandinagari::LetterTta),
            '๐‘ฆน' => Ok(Nandinagari::LetterTtha),
            '๐‘ฆบ' => Ok(Nandinagari::LetterDda),
            '๐‘ฆป' => Ok(Nandinagari::LetterDdha),
            '๐‘ฆผ' => Ok(Nandinagari::LetterNna),
            '๐‘ฆฝ' => Ok(Nandinagari::LetterTa),
            '๐‘ฆพ' => Ok(Nandinagari::LetterTha),
            '๐‘ฆฟ' => Ok(Nandinagari::LetterDa),
            '๐‘ง€' => Ok(Nandinagari::LetterDha),
            '๐‘ง' => Ok(Nandinagari::LetterNa),
            '๐‘ง‚' => Ok(Nandinagari::LetterPa),
            '๐‘งƒ' => Ok(Nandinagari::LetterPha),
            '๐‘ง„' => Ok(Nandinagari::LetterBa),
            '๐‘ง…' => Ok(Nandinagari::LetterBha),
            '๐‘ง†' => Ok(Nandinagari::LetterMa),
            '๐‘ง‡' => Ok(Nandinagari::LetterYa),
            '๐‘งˆ' => Ok(Nandinagari::LetterRa),
            '๐‘ง‰' => Ok(Nandinagari::LetterLa),
            '๐‘งŠ' => Ok(Nandinagari::LetterVa),
            '๐‘ง‹' => Ok(Nandinagari::LetterSha),
            '๐‘งŒ' => Ok(Nandinagari::LetterSsa),
            '๐‘ง' => Ok(Nandinagari::LetterSa),
            '๐‘งŽ' => Ok(Nandinagari::LetterHa),
            '๐‘ง' => Ok(Nandinagari::LetterLla),
            '๐‘ง' => Ok(Nandinagari::LetterRra),
            '๐‘ง‘' => Ok(Nandinagari::VowelSignAa),
            '๐‘ง’' => Ok(Nandinagari::VowelSignI),
            '๐‘ง“' => Ok(Nandinagari::VowelSignIi),
            '๐‘ง”' => Ok(Nandinagari::VowelSignU),
            '๐‘ง•' => Ok(Nandinagari::VowelSignUu),
            '๐‘ง–' => Ok(Nandinagari::VowelSignVocalicR),
            '๐‘ง—' => Ok(Nandinagari::VowelSignVocalicRr),
            '๐‘งš' => Ok(Nandinagari::VowelSignE),
            '๐‘ง›' => Ok(Nandinagari::VowelSignAi),
            '๐‘งœ' => Ok(Nandinagari::VowelSignO),
            '๐‘ง' => Ok(Nandinagari::VowelSignAu),
            '๐‘งž' => Ok(Nandinagari::SignAnusvara),
            '๐‘งŸ' => Ok(Nandinagari::SignVisarga),
            '๐‘ง ' => Ok(Nandinagari::SignVirama),
            '๐‘งก' => Ok(Nandinagari::SignAvagraha),
            '๐‘งข' => Ok(Nandinagari::SignSiddham),
            '๐‘งฃ' => Ok(Nandinagari::Headstroke),
            '๐‘งค' => Ok(Nandinagari::VowelSignPrishthamatraE),
            _ => Err(()),
        }
    }
}

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

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