braillify 2.0.1

Rust 기반 크로스플랫폼 한국어 점역 라이브러리
Documentation
use phf::phf_map;

use crate::{moeum::jungsong::JUNGSEONG_MAP, unicode::decode_unicode};

pub static KOREAN_PART_MAP: phf::Map<char, &'static [u8]> = phf_map! {
    '' => &[decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode('')],
    '' => &[decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode('')],
    '' => &[decode_unicode('')],
    '' => &[decode_unicode(''), decode_unicode('')],
    '' => &[decode_unicode('')],
    '' => &[decode_unicode('')],
    '' => &[decode_unicode('')],
    '' => &[decode_unicode('')],
    '' => &[decode_unicode('')],
};

/// 제8항 자음자나 모음자가 단독으로 쓰일 때에는 해당 글자 앞에 온표 =을 적어 나타내며, 자음자는 받침으로 적는다
pub fn encode_korean_part(text: char) -> Result<&'static [u8], String> {
    if let Some(code) = KOREAN_PART_MAP.get(&text) {
        return Ok(code);
    }
    if let Some(code) = JUNGSEONG_MAP.get(&text) {
        return Ok(code);
    }
    Err("Invalid Korean part character".to_string())
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn rejects_non_korean_part_input() {
        assert!(encode_korean_part('a').is_err());
        assert!(encode_korean_part('1').is_err());
        assert!(encode_korean_part('!').is_err());
    }

    #[test]
    fn accepts_jongseong_jamo() {
        assert!(encode_korean_part('').is_ok());
        assert!(encode_korean_part('').is_ok());
    }

    #[test]
    fn accepts_jungseong_jamo() {
        assert!(encode_korean_part('').is_ok());
        assert!(encode_korean_part('').is_ok());
    }
}