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 Makasar block.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Makasar {
    /// \u{11ee0}: '饝粻'
    LetterKa,
    /// \u{11ee1}: '饝弧'
    LetterGa,
    /// \u{11ee2}: '饝虎'
    LetterNga,
    /// \u{11ee3}: '饝唬'
    LetterPa,
    /// \u{11ee4}: '饝护'
    LetterBa,
    /// \u{11ee5}: '饝互'
    LetterMa,
    /// \u{11ee6}: '饝沪'
    LetterTa,
    /// \u{11ee7}: '饝户'
    LetterDa,
    /// \u{11ee8}: '饝花'
    LetterNa,
    /// \u{11ee9}: '饝哗'
    LetterCa,
    /// \u{11eea}: '饝华'
    LetterJa,
    /// \u{11eeb}: '饝猾'
    LetterNya,
    /// \u{11eec}: '饝滑'
    LetterYa,
    /// \u{11eed}: '饝画'
    LetterRa,
    /// \u{11eee}: '饝划'
    LetterLa,
    /// \u{11eef}: '饝化'
    LetterVa,
    /// \u{11ef0}: '饝话'
    LetterSa,
    /// \u{11ef1}: '饝槐'
    LetterA,
    /// \u{11ef2}: '饝徊'
    Angka,
    /// \u{11ef3}: '饝怀'
    VowelSignI,
    /// \u{11ef4}: '饝淮'
    VowelSignU,
    /// \u{11ef5}: '饝坏'
    VowelSignE,
    /// \u{11ef6}: '饝欢'
    VowelSignO,
    /// \u{11ef7}: '饝环'
    Passimbang,
    /// \u{11ef8}: '饝桓'
    EndOfSection,
}

impl Into<char> for Makasar {
    fn into(self) -> char {
        match self {
            Makasar::LetterKa => '饝粻',
            Makasar::LetterGa => '饝弧',
            Makasar::LetterNga => '饝虎',
            Makasar::LetterPa => '饝唬',
            Makasar::LetterBa => '饝护',
            Makasar::LetterMa => '饝互',
            Makasar::LetterTa => '饝沪',
            Makasar::LetterDa => '饝户',
            Makasar::LetterNa => '饝花',
            Makasar::LetterCa => '饝哗',
            Makasar::LetterJa => '饝华',
            Makasar::LetterNya => '饝猾',
            Makasar::LetterYa => '饝滑',
            Makasar::LetterRa => '饝画',
            Makasar::LetterLa => '饝划',
            Makasar::LetterVa => '饝化',
            Makasar::LetterSa => '饝话',
            Makasar::LetterA => '饝槐',
            Makasar::Angka => '饝徊',
            Makasar::VowelSignI => '饝怀',
            Makasar::VowelSignU => '饝淮',
            Makasar::VowelSignE => '饝坏',
            Makasar::VowelSignO => '饝欢',
            Makasar::Passimbang => '饝环',
            Makasar::EndOfSection => '饝桓',
        }
    }
}

impl std::convert::TryFrom<char> for Makasar {
    type Error = ();
    fn try_from(c: char) -> Result<Self, Self::Error> {
        match c {
            '饝粻' => Ok(Makasar::LetterKa),
            '饝弧' => Ok(Makasar::LetterGa),
            '饝虎' => Ok(Makasar::LetterNga),
            '饝唬' => Ok(Makasar::LetterPa),
            '饝护' => Ok(Makasar::LetterBa),
            '饝互' => Ok(Makasar::LetterMa),
            '饝沪' => Ok(Makasar::LetterTa),
            '饝户' => Ok(Makasar::LetterDa),
            '饝花' => Ok(Makasar::LetterNa),
            '饝哗' => Ok(Makasar::LetterCa),
            '饝华' => Ok(Makasar::LetterJa),
            '饝猾' => Ok(Makasar::LetterNya),
            '饝滑' => Ok(Makasar::LetterYa),
            '饝画' => Ok(Makasar::LetterRa),
            '饝划' => Ok(Makasar::LetterLa),
            '饝化' => Ok(Makasar::LetterVa),
            '饝话' => Ok(Makasar::LetterSa),
            '饝槐' => Ok(Makasar::LetterA),
            '饝徊' => Ok(Makasar::Angka),
            '饝怀' => Ok(Makasar::VowelSignI),
            '饝淮' => Ok(Makasar::VowelSignU),
            '饝坏' => Ok(Makasar::VowelSignE),
            '饝欢' => Ok(Makasar::VowelSignO),
            '饝环' => Ok(Makasar::Passimbang),
            '饝桓' => Ok(Makasar::EndOfSection),
            _ => Err(()),
        }
    }
}

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

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