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 Limbu block.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Limbu {
    /// \u{1900}: 'ᤀ'
    VowelDashCarrierLetter,
    /// \u{1901}: 'ᤁ'
    LetterKa,
    /// \u{1902}: 'ᤂ'
    LetterKha,
    /// \u{1903}: 'ᤃ'
    LetterGa,
    /// \u{1904}: 'ᤄ'
    LetterGha,
    /// \u{1905}: 'ᤅ'
    LetterNga,
    /// \u{1906}: 'ᤆ'
    LetterCa,
    /// \u{1907}: 'ᤇ'
    LetterCha,
    /// \u{1908}: 'ᤈ'
    LetterJa,
    /// \u{1909}: 'ᤉ'
    LetterJha,
    /// \u{190a}: 'ᤊ'
    LetterYan,
    /// \u{190b}: 'ᤋ'
    LetterTa,
    /// \u{190c}: 'ᤌ'
    LetterTha,
    /// \u{190d}: 'ᤍ'
    LetterDa,
    /// \u{190e}: 'ᤎ'
    LetterDha,
    /// \u{190f}: 'ᤏ'
    LetterNa,
    /// \u{1910}: 'ᤐ'
    LetterPa,
    /// \u{1911}: 'ᤑ'
    LetterPha,
    /// \u{1912}: 'ᤒ'
    LetterBa,
    /// \u{1913}: 'ᤓ'
    LetterBha,
    /// \u{1914}: 'ᤔ'
    LetterMa,
    /// \u{1915}: 'ᤕ'
    LetterYa,
    /// \u{1916}: 'ᤖ'
    LetterRa,
    /// \u{1917}: 'ᤗ'
    LetterLa,
    /// \u{1918}: 'ᤘ'
    LetterWa,
    /// \u{1919}: 'ᤙ'
    LetterSha,
    /// \u{191a}: 'ᤚ'
    LetterSsa,
    /// \u{191b}: 'ᤛ'
    LetterSa,
    /// \u{191c}: 'ᤜ'
    LetterHa,
    /// \u{191d}: 'ᤝ'
    LetterGyan,
    /// \u{191e}: 'ᤞ'
    LetterTra,
    /// \u{1920}: 'ᤠ'
    VowelSignA,
    /// \u{1921}: 'ᤡ'
    VowelSignI,
    /// \u{1922}: 'ᤢ'
    VowelSignU,
    /// \u{1923}: 'ᤣ'
    VowelSignEe,
    /// \u{1924}: 'ᤤ'
    VowelSignAi,
    /// \u{1925}: 'ᤥ'
    VowelSignOo,
    /// \u{1926}: 'ᤦ'
    VowelSignAu,
    /// \u{1927}: 'ᤧ'
    VowelSignE,
    /// \u{1928}: 'ᤨ'
    VowelSignO,
    /// \u{1929}: 'ᤩ'
    SubjoinedLetterYa,
    /// \u{192a}: 'ᤪ'
    SubjoinedLetterRa,
    /// \u{192b}: 'ᤫ'
    SubjoinedLetterWa,
    /// \u{1930}: 'ᤰ'
    SmallLetterKa,
    /// \u{1931}: 'ᤱ'
    SmallLetterNga,
    /// \u{1932}: 'ᤲ'
    SmallLetterAnusvara,
    /// \u{1933}: 'ᤳ'
    SmallLetterTa,
    /// \u{1934}: 'ᤴ'
    SmallLetterNa,
    /// \u{1935}: 'ᤵ'
    SmallLetterPa,
    /// \u{1936}: 'ᤶ'
    SmallLetterMa,
    /// \u{1937}: 'ᤷ'
    SmallLetterRa,
    /// \u{1938}: 'ᤸ'
    SmallLetterLa,
    /// \u{1939}: '᤹'
    SignMukphreng,
    /// \u{193a}: '᤺'
    SignKemphreng,
    /// \u{193b}: '᤻'
    SignSaDashI,
    /// \u{1940}: '᥀'
    SignLoo,
    /// \u{1944}: '᥄'
    ExclamationMark,
    /// \u{1945}: '᥅'
    QuestionMark,
    /// \u{1946}: '᥆'
    DigitZero,
    /// \u{1947}: '᥇'
    DigitOne,
    /// \u{1948}: '᥈'
    DigitTwo,
    /// \u{1949}: '᥉'
    DigitThree,
    /// \u{194a}: '᥊'
    DigitFour,
    /// \u{194b}: '᥋'
    DigitFive,
    /// \u{194c}: '᥌'
    DigitSix,
    /// \u{194d}: '᥍'
    DigitSeven,
    /// \u{194e}: '᥎'
    DigitEight,
}

impl Into<char> for Limbu {
    fn into(self) -> char {
        match self {
            Limbu::VowelDashCarrierLetter => '',
            Limbu::LetterKa => '',
            Limbu::LetterKha => '',
            Limbu::LetterGa => '',
            Limbu::LetterGha => '',
            Limbu::LetterNga => '',
            Limbu::LetterCa => '',
            Limbu::LetterCha => '',
            Limbu::LetterJa => '',
            Limbu::LetterJha => '',
            Limbu::LetterYan => '',
            Limbu::LetterTa => '',
            Limbu::LetterTha => '',
            Limbu::LetterDa => '',
            Limbu::LetterDha => '',
            Limbu::LetterNa => '',
            Limbu::LetterPa => '',
            Limbu::LetterPha => '',
            Limbu::LetterBa => '',
            Limbu::LetterBha => '',
            Limbu::LetterMa => '',
            Limbu::LetterYa => '',
            Limbu::LetterRa => '',
            Limbu::LetterLa => '',
            Limbu::LetterWa => '',
            Limbu::LetterSha => '',
            Limbu::LetterSsa => '',
            Limbu::LetterSa => '',
            Limbu::LetterHa => '',
            Limbu::LetterGyan => '',
            Limbu::LetterTra => '',
            Limbu::VowelSignA => '',
            Limbu::VowelSignI => '',
            Limbu::VowelSignU => '',
            Limbu::VowelSignEe => '',
            Limbu::VowelSignAi => '',
            Limbu::VowelSignOo => '',
            Limbu::VowelSignAu => '',
            Limbu::VowelSignE => '',
            Limbu::VowelSignO => '',
            Limbu::SubjoinedLetterYa => '',
            Limbu::SubjoinedLetterRa => '',
            Limbu::SubjoinedLetterWa => '',
            Limbu::SmallLetterKa => '',
            Limbu::SmallLetterNga => '',
            Limbu::SmallLetterAnusvara => '',
            Limbu::SmallLetterTa => '',
            Limbu::SmallLetterNa => '',
            Limbu::SmallLetterPa => '',
            Limbu::SmallLetterMa => '',
            Limbu::SmallLetterRa => '',
            Limbu::SmallLetterLa => '',
            Limbu::SignMukphreng => '',
            Limbu::SignKemphreng => '',
            Limbu::SignSaDashI => '',
            Limbu::SignLoo => '',
            Limbu::ExclamationMark => '',
            Limbu::QuestionMark => '',
            Limbu::DigitZero => '',
            Limbu::DigitOne => '',
            Limbu::DigitTwo => '',
            Limbu::DigitThree => '',
            Limbu::DigitFour => '',
            Limbu::DigitFive => '',
            Limbu::DigitSix => '',
            Limbu::DigitSeven => '',
            Limbu::DigitEight => '',
        }
    }
}

impl std::convert::TryFrom<char> for Limbu {
    type Error = ();
    fn try_from(c: char) -> Result<Self, Self::Error> {
        match c {
            '' => Ok(Limbu::VowelDashCarrierLetter),
            '' => Ok(Limbu::LetterKa),
            '' => Ok(Limbu::LetterKha),
            '' => Ok(Limbu::LetterGa),
            '' => Ok(Limbu::LetterGha),
            '' => Ok(Limbu::LetterNga),
            '' => Ok(Limbu::LetterCa),
            '' => Ok(Limbu::LetterCha),
            '' => Ok(Limbu::LetterJa),
            '' => Ok(Limbu::LetterJha),
            '' => Ok(Limbu::LetterYan),
            '' => Ok(Limbu::LetterTa),
            '' => Ok(Limbu::LetterTha),
            '' => Ok(Limbu::LetterDa),
            '' => Ok(Limbu::LetterDha),
            '' => Ok(Limbu::LetterNa),
            '' => Ok(Limbu::LetterPa),
            '' => Ok(Limbu::LetterPha),
            '' => Ok(Limbu::LetterBa),
            '' => Ok(Limbu::LetterBha),
            '' => Ok(Limbu::LetterMa),
            '' => Ok(Limbu::LetterYa),
            '' => Ok(Limbu::LetterRa),
            '' => Ok(Limbu::LetterLa),
            '' => Ok(Limbu::LetterWa),
            '' => Ok(Limbu::LetterSha),
            '' => Ok(Limbu::LetterSsa),
            '' => Ok(Limbu::LetterSa),
            '' => Ok(Limbu::LetterHa),
            '' => Ok(Limbu::LetterGyan),
            '' => Ok(Limbu::LetterTra),
            '' => Ok(Limbu::VowelSignA),
            '' => Ok(Limbu::VowelSignI),
            '' => Ok(Limbu::VowelSignU),
            '' => Ok(Limbu::VowelSignEe),
            '' => Ok(Limbu::VowelSignAi),
            '' => Ok(Limbu::VowelSignOo),
            '' => Ok(Limbu::VowelSignAu),
            '' => Ok(Limbu::VowelSignE),
            '' => Ok(Limbu::VowelSignO),
            '' => Ok(Limbu::SubjoinedLetterYa),
            '' => Ok(Limbu::SubjoinedLetterRa),
            '' => Ok(Limbu::SubjoinedLetterWa),
            '' => Ok(Limbu::SmallLetterKa),
            '' => Ok(Limbu::SmallLetterNga),
            '' => Ok(Limbu::SmallLetterAnusvara),
            '' => Ok(Limbu::SmallLetterTa),
            '' => Ok(Limbu::SmallLetterNa),
            '' => Ok(Limbu::SmallLetterPa),
            '' => Ok(Limbu::SmallLetterMa),
            '' => Ok(Limbu::SmallLetterRa),
            '' => Ok(Limbu::SmallLetterLa),
            '' => Ok(Limbu::SignMukphreng),
            '' => Ok(Limbu::SignKemphreng),
            '' => Ok(Limbu::SignSaDashI),
            '' => Ok(Limbu::SignLoo),
            '' => Ok(Limbu::ExclamationMark),
            '' => Ok(Limbu::QuestionMark),
            '' => Ok(Limbu::DigitZero),
            '' => Ok(Limbu::DigitOne),
            '' => Ok(Limbu::DigitTwo),
            '' => Ok(Limbu::DigitThree),
            '' => Ok(Limbu::DigitFour),
            '' => Ok(Limbu::DigitFive),
            '' => Ok(Limbu::DigitSix),
            '' => Ok(Limbu::DigitSeven),
            '' => Ok(Limbu::DigitEight),
            _ => Err(()),
        }
    }
}

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

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