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 Sundanese block.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Sundanese {
    /// \u{1b80}: 'ᮀ'
    SignPanyecek,
    /// \u{1b81}: 'ᮁ'
    SignPanglayar,
    /// \u{1b82}: 'ᮂ'
    SignPangwisad,
    /// \u{1b83}: 'ᮃ'
    LetterA,
    /// \u{1b84}: 'ᮄ'
    LetterI,
    /// \u{1b85}: 'ᮅ'
    LetterU,
    /// \u{1b86}: 'ᮆ'
    LetterAe,
    /// \u{1b87}: 'ᮇ'
    LetterO,
    /// \u{1b88}: 'ᮈ'
    LetterE,
    /// \u{1b89}: 'ᮉ'
    LetterEu,
    /// \u{1b8a}: 'ᮊ'
    LetterKa,
    /// \u{1b8b}: 'ᮋ'
    LetterQa,
    /// \u{1b8c}: 'ᮌ'
    LetterGa,
    /// \u{1b8d}: 'ᮍ'
    LetterNga,
    /// \u{1b8e}: 'ᮎ'
    LetterCa,
    /// \u{1b8f}: 'ᮏ'
    LetterJa,
    /// \u{1b90}: 'ᮐ'
    LetterZa,
    /// \u{1b91}: 'ᮑ'
    LetterNya,
    /// \u{1b92}: 'ᮒ'
    LetterTa,
    /// \u{1b93}: 'ᮓ'
    LetterDa,
    /// \u{1b94}: 'ᮔ'
    LetterNa,
    /// \u{1b95}: 'ᮕ'
    LetterPa,
    /// \u{1b96}: 'ᮖ'
    LetterFa,
    /// \u{1b97}: 'ᮗ'
    LetterVa,
    /// \u{1b98}: 'ᮘ'
    LetterBa,
    /// \u{1b99}: 'ᮙ'
    LetterMa,
    /// \u{1b9a}: 'ᮚ'
    LetterYa,
    /// \u{1b9b}: 'ᮛ'
    LetterRa,
    /// \u{1b9c}: 'ᮜ'
    LetterLa,
    /// \u{1b9d}: 'ᮝ'
    LetterWa,
    /// \u{1b9e}: 'ᮞ'
    LetterSa,
    /// \u{1b9f}: 'ᮟ'
    LetterXa,
    /// \u{1ba0}: 'ᮠ'
    LetterHa,
    /// \u{1ba1}: 'ᮡ'
    ConsonantSignPamingkal,
    /// \u{1ba2}: 'ᮢ'
    ConsonantSignPanyakra,
    /// \u{1ba3}: 'ᮣ'
    ConsonantSignPanyiku,
    /// \u{1ba4}: 'ᮤ'
    VowelSignPanghulu,
    /// \u{1ba5}: 'ᮥ'
    VowelSignPanyuku,
    /// \u{1ba6}: 'ᮦ'
    VowelSignPanaelaeng,
    /// \u{1ba7}: 'ᮧ'
    VowelSignPanolong,
    /// \u{1ba8}: 'ᮨ'
    VowelSignPamepet,
    /// \u{1ba9}: 'ᮩ'
    VowelSignPaneuleung,
    /// \u{1baa}: '᮪'
    SignPamaaeh,
    /// \u{1bab}: '᮫'
    SignVirama,
    /// \u{1bac}: 'ᮬ'
    ConsonantSignPasanganMa,
    /// \u{1bad}: 'ᮭ'
    ConsonantSignPasanganWa,
    /// \u{1bae}: 'ᮮ'
    LetterKha,
    /// \u{1baf}: 'ᮯ'
    LetterSya,
    /// \u{1bb0}: '᮰'
    DigitZero,
    /// \u{1bb1}: '᮱'
    DigitOne,
    /// \u{1bb2}: '᮲'
    DigitTwo,
    /// \u{1bb3}: '᮳'
    DigitThree,
    /// \u{1bb4}: '᮴'
    DigitFour,
    /// \u{1bb5}: '᮵'
    DigitFive,
    /// \u{1bb6}: '᮶'
    DigitSix,
    /// \u{1bb7}: '᮷'
    DigitSeven,
    /// \u{1bb8}: '᮸'
    DigitEight,
    /// \u{1bb9}: '᮹'
    DigitNine,
    /// \u{1bba}: 'ᮺ'
    Avagraha,
    /// \u{1bbb}: 'ᮻ'
    LetterReu,
    /// \u{1bbc}: 'ᮼ'
    LetterLeu,
    /// \u{1bbd}: 'ᮽ'
    LetterBha,
    /// \u{1bbe}: 'ᮾ'
    LetterFinalK,
}

impl Into<char> for Sundanese {
    fn into(self) -> char {
        match self {
            Sundanese::SignPanyecek => '',
            Sundanese::SignPanglayar => '',
            Sundanese::SignPangwisad => '',
            Sundanese::LetterA => '',
            Sundanese::LetterI => '',
            Sundanese::LetterU => '',
            Sundanese::LetterAe => '',
            Sundanese::LetterO => '',
            Sundanese::LetterE => '',
            Sundanese::LetterEu => '',
            Sundanese::LetterKa => '',
            Sundanese::LetterQa => '',
            Sundanese::LetterGa => '',
            Sundanese::LetterNga => '',
            Sundanese::LetterCa => '',
            Sundanese::LetterJa => '',
            Sundanese::LetterZa => '',
            Sundanese::LetterNya => '',
            Sundanese::LetterTa => '',
            Sundanese::LetterDa => '',
            Sundanese::LetterNa => '',
            Sundanese::LetterPa => '',
            Sundanese::LetterFa => '',
            Sundanese::LetterVa => '',
            Sundanese::LetterBa => '',
            Sundanese::LetterMa => '',
            Sundanese::LetterYa => '',
            Sundanese::LetterRa => '',
            Sundanese::LetterLa => '',
            Sundanese::LetterWa => '',
            Sundanese::LetterSa => '',
            Sundanese::LetterXa => '',
            Sundanese::LetterHa => '',
            Sundanese::ConsonantSignPamingkal => '',
            Sundanese::ConsonantSignPanyakra => '',
            Sundanese::ConsonantSignPanyiku => '',
            Sundanese::VowelSignPanghulu => '',
            Sundanese::VowelSignPanyuku => '',
            Sundanese::VowelSignPanaelaeng => '',
            Sundanese::VowelSignPanolong => '',
            Sundanese::VowelSignPamepet => '',
            Sundanese::VowelSignPaneuleung => '',
            Sundanese::SignPamaaeh => '',
            Sundanese::SignVirama => '',
            Sundanese::ConsonantSignPasanganMa => '',
            Sundanese::ConsonantSignPasanganWa => '',
            Sundanese::LetterKha => '',
            Sundanese::LetterSya => '',
            Sundanese::DigitZero => '',
            Sundanese::DigitOne => '',
            Sundanese::DigitTwo => '',
            Sundanese::DigitThree => '',
            Sundanese::DigitFour => '',
            Sundanese::DigitFive => '',
            Sundanese::DigitSix => '',
            Sundanese::DigitSeven => '',
            Sundanese::DigitEight => '',
            Sundanese::DigitNine => '',
            Sundanese::Avagraha => '',
            Sundanese::LetterReu => '',
            Sundanese::LetterLeu => '',
            Sundanese::LetterBha => '',
            Sundanese::LetterFinalK => '',
        }
    }
}

impl std::convert::TryFrom<char> for Sundanese {
    type Error = ();
    fn try_from(c: char) -> Result<Self, Self::Error> {
        match c {
            '' => Ok(Sundanese::SignPanyecek),
            '' => Ok(Sundanese::SignPanglayar),
            '' => Ok(Sundanese::SignPangwisad),
            '' => Ok(Sundanese::LetterA),
            '' => Ok(Sundanese::LetterI),
            '' => Ok(Sundanese::LetterU),
            '' => Ok(Sundanese::LetterAe),
            '' => Ok(Sundanese::LetterO),
            '' => Ok(Sundanese::LetterE),
            '' => Ok(Sundanese::LetterEu),
            '' => Ok(Sundanese::LetterKa),
            '' => Ok(Sundanese::LetterQa),
            '' => Ok(Sundanese::LetterGa),
            '' => Ok(Sundanese::LetterNga),
            '' => Ok(Sundanese::LetterCa),
            '' => Ok(Sundanese::LetterJa),
            '' => Ok(Sundanese::LetterZa),
            '' => Ok(Sundanese::LetterNya),
            '' => Ok(Sundanese::LetterTa),
            '' => Ok(Sundanese::LetterDa),
            '' => Ok(Sundanese::LetterNa),
            '' => Ok(Sundanese::LetterPa),
            '' => Ok(Sundanese::LetterFa),
            '' => Ok(Sundanese::LetterVa),
            '' => Ok(Sundanese::LetterBa),
            '' => Ok(Sundanese::LetterMa),
            '' => Ok(Sundanese::LetterYa),
            '' => Ok(Sundanese::LetterRa),
            '' => Ok(Sundanese::LetterLa),
            '' => Ok(Sundanese::LetterWa),
            '' => Ok(Sundanese::LetterSa),
            '' => Ok(Sundanese::LetterXa),
            '' => Ok(Sundanese::LetterHa),
            '' => Ok(Sundanese::ConsonantSignPamingkal),
            '' => Ok(Sundanese::ConsonantSignPanyakra),
            '' => Ok(Sundanese::ConsonantSignPanyiku),
            '' => Ok(Sundanese::VowelSignPanghulu),
            '' => Ok(Sundanese::VowelSignPanyuku),
            '' => Ok(Sundanese::VowelSignPanaelaeng),
            '' => Ok(Sundanese::VowelSignPanolong),
            '' => Ok(Sundanese::VowelSignPamepet),
            '' => Ok(Sundanese::VowelSignPaneuleung),
            '' => Ok(Sundanese::SignPamaaeh),
            '' => Ok(Sundanese::SignVirama),
            '' => Ok(Sundanese::ConsonantSignPasanganMa),
            '' => Ok(Sundanese::ConsonantSignPasanganWa),
            '' => Ok(Sundanese::LetterKha),
            '' => Ok(Sundanese::LetterSya),
            '' => Ok(Sundanese::DigitZero),
            '' => Ok(Sundanese::DigitOne),
            '' => Ok(Sundanese::DigitTwo),
            '' => Ok(Sundanese::DigitThree),
            '' => Ok(Sundanese::DigitFour),
            '' => Ok(Sundanese::DigitFive),
            '' => Ok(Sundanese::DigitSix),
            '' => Ok(Sundanese::DigitSeven),
            '' => Ok(Sundanese::DigitEight),
            '' => Ok(Sundanese::DigitNine),
            '' => Ok(Sundanese::Avagraha),
            '' => Ok(Sundanese::LetterReu),
            '' => Ok(Sundanese::LetterLeu),
            '' => Ok(Sundanese::LetterBha),
            '' => Ok(Sundanese::LetterFinalK),
            _ => Err(()),
        }
    }
}

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

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