kanabake 0.1.0

Turn Romaji strings into Hiragana or Katakana
Documentation
use lazy_static::lazy_static;
use std::collections::HashMap;

pub enum KanaType {
    Hiragana,
    Katakana,
}

pub struct CharacterSet {
    pub kind: KanaType,
}

impl CharacterSet {
    pub fn new(set_type: KanaType) -> CharacterSet {
        CharacterSet {
            kind: set_type,
        }
    }

    pub fn get(&self, key: &str) -> Option<&str> {
        let option = match &self.kind {
            KanaType::Hiragana => HIRAGANA.get(key),
            KanaType::Katakana => KATAKANA.get(key),
        };

        match option {
            Some(val) => Some(val),
            None => None,
        }
    }
}

lazy_static! {
    static ref HIRAGANA: HashMap<&'static str, &'static str> = {
        let mut map = HashMap::new();
        map.insert("A", "");
        map.insert("I", "");
        map.insert("U", "");
        map.insert("E", "");
        map.insert("O", "");
        map.insert("KA", "");
        map.insert("KI", "");
        map.insert("KYA", "きゃ");
        map.insert("KYU", "きゅ");
        map.insert("KYO", "きょ");
        map.insert("KU", "");
        map.insert("KE", "");
        map.insert("KO", "");
        map.insert("GA", "");
        map.insert("GI", "");
        map.insert("GYA", "ぎゃ");
        map.insert("GYU", "ぎゅ");
        map.insert("GYO", "ぎょ");
        map.insert("GU", "");
        map.insert("GE", "");
        map.insert("GO", "");
        map.insert("SA", "");
        map.insert("SHI", "");
        map.insert("SHA", "しゃ");
        map.insert("SHU", "しゅ");
        map.insert("SHO", "しょ");
        map.insert("SU", "");
        map.insert("SE", "");
        map.insert("SO", "");
        map.insert("ZA", "");
        map.insert("JI", "");
        map.insert("JA", "じゃ");
        map.insert("JU", "じゅ");
        map.insert("JO", "じょ");
        map.insert("JYA", "じゃ");
        map.insert("JYU", "じゅ");
        map.insert("JYO", "じょ");
        map.insert("ZU", "");
        map.insert("ZE", "");
        map.insert("ZO", "");
        map.insert("TA", "");
        map.insert("CHI", "");
        map.insert("CHA", "ちゃ");
        map.insert("CHU", "ちゅ");
        map.insert("CHO", "ちょ");
        map.insert("TSU", "");
        map.insert("TE", "");
        map.insert("TO", "");
        map.insert("DA", "");
        map.insert("DI", "");
        map.insert("DYA", "ぢゃ");
        map.insert("DYU", "ぢゅ");
        map.insert("DYO", "ぢょ");
        map.insert("DU", "");
        map.insert("DZU", "");
        map.insert("DE", "");
        map.insert("DO", "");
        map.insert("NA", "");
        map.insert("NI", "");
        map.insert("NYA", "にゃ");
        map.insert("NYU", "にゅ");
        map.insert("NYO", "にょ");
        map.insert("NU", "");
        map.insert("NE", "");
        map.insert("NO", "");
        map.insert("HA", "");
        map.insert("HI", "");
        map.insert("HYA", "ひゃ");
        map.insert("HYU", "ひゅ");
        map.insert("HYO", "ひょ");
        map.insert("FU", "");
        map.insert("HU", "");
        map.insert("HE", "");
        map.insert("HO", "");
        map.insert("BA", "");
        map.insert("BI", "");
        map.insert("BYA", "びゃ");
        map.insert("BYU", "びゅ");
        map.insert("BYO", "びょ");
        map.insert("BU", "");
        map.insert("BE", "");
        map.insert("BO", "");
        map.insert("PA", "");
        map.insert("PI", "");
        map.insert("PYA", "ぴゃ");
        map.insert("PYU", "ぴゅ");
        map.insert("PYO", "ぴょ");
        map.insert("PU", "");
        map.insert("PE", "");
        map.insert("PO", "");
        map.insert("MA", "");
        map.insert("MI", "");
        map.insert("MYA", "みゃ");
        map.insert("MYU", "みゅ");
        map.insert("MYO", "みょ");
        map.insert("MU", "");
        map.insert("ME", "");
        map.insert("MO", "");
        map.insert("YA", "");
        map.insert("YU", "");
        map.insert("YO", "");
        map.insert("RA", "");
        map.insert("RI", "");
        map.insert("RYA", "りゃ");
        map.insert("RYU", "りゅ");
        map.insert("RYO", "りょ");
        map.insert("RU", "");
        map.insert("RE", "");
        map.insert("RO", "");
        map.insert("WA", "");
        map.insert("WO", "");
        map.insert("N", "");
        map.insert("LTSU", "");
        map
    };
}

lazy_static! {
    static ref KATAKANA: HashMap<&'static str, &'static str> = {
        let mut map = HashMap::new();
        map.insert("A", "");
        map.insert("I", "");
        map.insert("U", "");
        map.insert("E", "");
        map.insert("O", "");
        map.insert("KA", "");
        map.insert("KI", "");
        map.insert("KYA", "キャ");
        map.insert("KYU", "キュ");
        map.insert("KYO", "キョ");
        map.insert("KU", "");
        map.insert("KE", "");
        map.insert("KO", "");
        map.insert("GA", "");
        map.insert("GI", "");
        map.insert("GYA", "ギャ");
        map.insert("GYU", "ギュ");
        map.insert("GYO", "ギョ");
        map.insert("GU", "");
        map.insert("GE", "");
        map.insert("GO", "");
        map.insert("SA", "");
        map.insert("SHI", "");
        map.insert("SHA", "シャ");
        map.insert("SHU", "シュ");
        map.insert("SHO", "ショ");
        map.insert("SU", "");
        map.insert("SE", "");
        map.insert("SO", "");
        map.insert("ZA", "");
        map.insert("JI", "");
        map.insert("JA", "ジャ");
        map.insert("JU", "ジュ");
        map.insert("JO", "ジョ");
        map.insert("JYA", "ジャ");
        map.insert("JYU", "ジュ");
        map.insert("JYO", "ジョ");
        map.insert("ZU", "");
        map.insert("ZE", "");
        map.insert("ZO", "");
        map.insert("TA", "");
        map.insert("CHI", "");
        map.insert("CHA", "チャ");
        map.insert("CHU", "チュ");
        map.insert("CHO", "チョ");
        map.insert("TSU", "");
        map.insert("TE", "");
        map.insert("TO", "");
        map.insert("DA", "");
        map.insert("DI", "");
        map.insert("DYA", "ヂャ");
        map.insert("DYU", "ヂュ");
        map.insert("DYO", "ヂョ");
        map.insert("DU", "");
        map.insert("DZU", "");
        map.insert("DE", "");
        map.insert("DO", "");
        map.insert("NA", "");
        map.insert("NI", "");
        map.insert("NYA", "ニャ");
        map.insert("NYU", "ニュ");
        map.insert("NYO", "ニョ");
        map.insert("NU", "");
        map.insert("NE", "");
        map.insert("NO", "");
        map.insert("HA", "");
        map.insert("HI", "");
        map.insert("HYA", "ヒャ");
        map.insert("HYU", "ヒュ");
        map.insert("HYO", "ヒョ");
        map.insert("FU", "");
        map.insert("HU", "");
        map.insert("HE", "");
        map.insert("HO", "");
        map.insert("BA", "");
        map.insert("BI", "");
        map.insert("BYA", "ビャ");
        map.insert("BYU", "ビュ");
        map.insert("BYO", "ビョ");
        map.insert("BU", "");
        map.insert("BE", "");
        map.insert("BO", "");
        map.insert("PA", "");
        map.insert("PI", "");
        map.insert("PYA", "ピャ");
        map.insert("PYU", "ピュ");
        map.insert("PYO", "ピョ");
        map.insert("PU", "");
        map.insert("PE", "");
        map.insert("PO", "");
        map.insert("MA", "");
        map.insert("MI", "");
        map.insert("MYA", "ミャ");
        map.insert("MYU", "ミュ");
        map.insert("MYO", "ミョ");
        map.insert("MU", "");
        map.insert("ME", "");
        map.insert("MO", "");
        map.insert("YA", "");
        map.insert("YU", "");
        map.insert("YO", "");
        map.insert("RA", "");
        map.insert("RI", "");
        map.insert("RYA", "リャ");
        map.insert("RYU", "リュ");
        map.insert("RYO", "リョ");
        map.insert("RU", "");
        map.insert("RE", "");
        map.insert("RO", "");
        map.insert("WA", "");
        map.insert("WO", "");
        map.insert("N", "");
        map.insert("LTSU", "");
        map
    };
}