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 Samaritan block.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Samaritan {
    /// \u{800}: 'ࠀ'
    LetterAlaf,
    /// \u{801}: 'ࠁ'
    LetterBit,
    /// \u{802}: 'ࠂ'
    LetterGaman,
    /// \u{803}: 'ࠃ'
    LetterDalat,
    /// \u{804}: 'ࠄ'
    LetterIy,
    /// \u{805}: 'ࠅ'
    LetterBaa,
    /// \u{806}: 'ࠆ'
    LetterZen,
    /// \u{807}: 'ࠇ'
    LetterIt,
    /// \u{808}: 'ࠈ'
    LetterTit,
    /// \u{809}: 'ࠉ'
    LetterYut,
    /// \u{80a}: 'ࠊ'
    LetterKaaf,
    /// \u{80b}: 'ࠋ'
    LetterLabat,
    /// \u{80c}: 'ࠌ'
    LetterMim,
    /// \u{80d}: 'ࠍ'
    LetterNun,
    /// \u{80e}: 'ࠎ'
    LetterSingaat,
    /// \u{80f}: 'ࠏ'
    LetterIn,
    /// \u{810}: 'ࠐ'
    LetterFi,
    /// \u{811}: 'ࠑ'
    LetterTsaadiy,
    /// \u{812}: 'ࠒ'
    LetterQuf,
    /// \u{813}: 'ࠓ'
    LetterRish,
    /// \u{814}: 'ࠔ'
    LetterShan,
    /// \u{815}: 'ࠕ'
    LetterTaaf,
    /// \u{816}: 'ࠖ'
    MarkIn,
    /// \u{817}: 'ࠗ'
    MarkInDashAlaf,
    /// \u{818}: '࠘'
    MarkOcclusion,
    /// \u{819}: '࠙'
    MarkDagesh,
    /// \u{81a}: 'ࠚ'
    ModifierLetterEpentheticYut,
    /// \u{81b}: 'ࠛ'
    MarkEpentheticYut,
    /// \u{81c}: 'ࠜ'
    VowelSignLongE,
    /// \u{81d}: 'ࠝ'
    VowelSignE,
    /// \u{81e}: 'ࠞ'
    VowelSignOverlongAa,
    /// \u{81f}: 'ࠟ'
    VowelSignLongAa,
    /// \u{820}: 'ࠠ'
    VowelSignAa,
    /// \u{821}: 'ࠡ'
    VowelSignOverlongA,
    /// \u{822}: 'ࠢ'
    VowelSignLongA,
    /// \u{823}: 'ࠣ'
    VowelSignA,
    /// \u{824}: 'ࠤ'
    ModifierLetterShortA,
    /// \u{825}: 'ࠥ'
    VowelSignShortA,
    /// \u{826}: 'ࠦ'
    VowelSignLongU,
    /// \u{827}: 'ࠧ'
    VowelSignU,
    /// \u{828}: 'ࠨ'
    ModifierLetterI,
    /// \u{829}: 'ࠩ'
    VowelSignLongI,
    /// \u{82a}: 'ࠪ'
    VowelSignI,
    /// \u{82b}: 'ࠫ'
    VowelSignO,
    /// \u{82c}: 'ࠬ'
    VowelSignSukun,
    /// \u{82d}: '࠭'
    MarkNequdaa,
    /// \u{830}: '࠰'
    PunctuationNequdaa,
    /// \u{831}: '࠱'
    PunctuationAfsaaq,
    /// \u{832}: '࠲'
    PunctuationAnged,
    /// \u{833}: '࠳'
    PunctuationBau,
    /// \u{834}: '࠴'
    PunctuationAtmaau,
    /// \u{835}: '࠵'
    PunctuationShiyyaalaa,
    /// \u{836}: '࠶'
    AbbreviationMark,
    /// \u{837}: '࠷'
    PunctuationMelodicQitsa,
    /// \u{838}: '࠸'
    PunctuationZiqaa,
    /// \u{839}: '࠹'
    PunctuationQitsa,
    /// \u{83a}: '࠺'
    PunctuationZaef,
    /// \u{83b}: '࠻'
    PunctuationTuru,
    /// \u{83c}: '࠼'
    PunctuationArkaanu,
    /// \u{83d}: '࠽'
    PunctuationSofMashfaat,
    /// \u{83e}: '࠾'
    PunctuationAnnaau,
}

impl Into<char> for Samaritan {
    fn into(self) -> char {
        match self {
            Samaritan::LetterAlaf => '',
            Samaritan::LetterBit => '',
            Samaritan::LetterGaman => '',
            Samaritan::LetterDalat => '',
            Samaritan::LetterIy => '',
            Samaritan::LetterBaa => '',
            Samaritan::LetterZen => '',
            Samaritan::LetterIt => '',
            Samaritan::LetterTit => '',
            Samaritan::LetterYut => '',
            Samaritan::LetterKaaf => '',
            Samaritan::LetterLabat => '',
            Samaritan::LetterMim => '',
            Samaritan::LetterNun => '',
            Samaritan::LetterSingaat => '',
            Samaritan::LetterIn => '',
            Samaritan::LetterFi => '',
            Samaritan::LetterTsaadiy => '',
            Samaritan::LetterQuf => '',
            Samaritan::LetterRish => '',
            Samaritan::LetterShan => '',
            Samaritan::LetterTaaf => '',
            Samaritan::MarkIn => '',
            Samaritan::MarkInDashAlaf => '',
            Samaritan::MarkOcclusion => '',
            Samaritan::MarkDagesh => '',
            Samaritan::ModifierLetterEpentheticYut => '',
            Samaritan::MarkEpentheticYut => '',
            Samaritan::VowelSignLongE => '',
            Samaritan::VowelSignE => '',
            Samaritan::VowelSignOverlongAa => '',
            Samaritan::VowelSignLongAa => '',
            Samaritan::VowelSignAa => '',
            Samaritan::VowelSignOverlongA => '',
            Samaritan::VowelSignLongA => '',
            Samaritan::VowelSignA => '',
            Samaritan::ModifierLetterShortA => '',
            Samaritan::VowelSignShortA => '',
            Samaritan::VowelSignLongU => '',
            Samaritan::VowelSignU => '',
            Samaritan::ModifierLetterI => '',
            Samaritan::VowelSignLongI => '',
            Samaritan::VowelSignI => '',
            Samaritan::VowelSignO => '',
            Samaritan::VowelSignSukun => '',
            Samaritan::MarkNequdaa => '',
            Samaritan::PunctuationNequdaa => '',
            Samaritan::PunctuationAfsaaq => '',
            Samaritan::PunctuationAnged => '',
            Samaritan::PunctuationBau => '',
            Samaritan::PunctuationAtmaau => '',
            Samaritan::PunctuationShiyyaalaa => '',
            Samaritan::AbbreviationMark => '',
            Samaritan::PunctuationMelodicQitsa => '',
            Samaritan::PunctuationZiqaa => '',
            Samaritan::PunctuationQitsa => '',
            Samaritan::PunctuationZaef => '',
            Samaritan::PunctuationTuru => '',
            Samaritan::PunctuationArkaanu => '',
            Samaritan::PunctuationSofMashfaat => '',
            Samaritan::PunctuationAnnaau => '',
        }
    }
}

impl std::convert::TryFrom<char> for Samaritan {
    type Error = ();
    fn try_from(c: char) -> Result<Self, Self::Error> {
        match c {
            '' => Ok(Samaritan::LetterAlaf),
            '' => Ok(Samaritan::LetterBit),
            '' => Ok(Samaritan::LetterGaman),
            '' => Ok(Samaritan::LetterDalat),
            '' => Ok(Samaritan::LetterIy),
            '' => Ok(Samaritan::LetterBaa),
            '' => Ok(Samaritan::LetterZen),
            '' => Ok(Samaritan::LetterIt),
            '' => Ok(Samaritan::LetterTit),
            '' => Ok(Samaritan::LetterYut),
            '' => Ok(Samaritan::LetterKaaf),
            '' => Ok(Samaritan::LetterLabat),
            '' => Ok(Samaritan::LetterMim),
            '' => Ok(Samaritan::LetterNun),
            '' => Ok(Samaritan::LetterSingaat),
            '' => Ok(Samaritan::LetterIn),
            '' => Ok(Samaritan::LetterFi),
            '' => Ok(Samaritan::LetterTsaadiy),
            '' => Ok(Samaritan::LetterQuf),
            '' => Ok(Samaritan::LetterRish),
            '' => Ok(Samaritan::LetterShan),
            '' => Ok(Samaritan::LetterTaaf),
            '' => Ok(Samaritan::MarkIn),
            '' => Ok(Samaritan::MarkInDashAlaf),
            '' => Ok(Samaritan::MarkOcclusion),
            '' => Ok(Samaritan::MarkDagesh),
            '' => Ok(Samaritan::ModifierLetterEpentheticYut),
            '' => Ok(Samaritan::MarkEpentheticYut),
            '' => Ok(Samaritan::VowelSignLongE),
            '' => Ok(Samaritan::VowelSignE),
            '' => Ok(Samaritan::VowelSignOverlongAa),
            '' => Ok(Samaritan::VowelSignLongAa),
            '' => Ok(Samaritan::VowelSignAa),
            '' => Ok(Samaritan::VowelSignOverlongA),
            '' => Ok(Samaritan::VowelSignLongA),
            '' => Ok(Samaritan::VowelSignA),
            '' => Ok(Samaritan::ModifierLetterShortA),
            '' => Ok(Samaritan::VowelSignShortA),
            '' => Ok(Samaritan::VowelSignLongU),
            '' => Ok(Samaritan::VowelSignU),
            '' => Ok(Samaritan::ModifierLetterI),
            '' => Ok(Samaritan::VowelSignLongI),
            '' => Ok(Samaritan::VowelSignI),
            '' => Ok(Samaritan::VowelSignO),
            '' => Ok(Samaritan::VowelSignSukun),
            '' => Ok(Samaritan::MarkNequdaa),
            '' => Ok(Samaritan::PunctuationNequdaa),
            '' => Ok(Samaritan::PunctuationAfsaaq),
            '' => Ok(Samaritan::PunctuationAnged),
            '' => Ok(Samaritan::PunctuationBau),
            '' => Ok(Samaritan::PunctuationAtmaau),
            '' => Ok(Samaritan::PunctuationShiyyaalaa),
            '' => Ok(Samaritan::AbbreviationMark),
            '' => Ok(Samaritan::PunctuationMelodicQitsa),
            '' => Ok(Samaritan::PunctuationZiqaa),
            '' => Ok(Samaritan::PunctuationQitsa),
            '' => Ok(Samaritan::PunctuationZaef),
            '' => Ok(Samaritan::PunctuationTuru),
            '' => Ok(Samaritan::PunctuationArkaanu),
            '' => Ok(Samaritan::PunctuationSofMashfaat),
            '' => Ok(Samaritan::PunctuationAnnaau),
            _ => Err(()),
        }
    }
}

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

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