use crate::CskkError;
use serde::Deserialize;
use std::str::FromStr;
#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy, Deserialize, Serialize)]
#[repr(C)]
pub enum InputMode {
Hiragana,
Katakana,
HankakuKatakana,
Zenkaku,
Ascii,
}
impl FromStr for InputMode {
type Err = CskkError;
fn from_str(s: &str) -> Result<InputMode, CskkError> {
match s {
"Hiragana" => Ok(InputMode::Hiragana),
"Katakana" => Ok(InputMode::Katakana),
"HankakuKatakana" => Ok(InputMode::HankakuKatakana),
"Zenkaku" => Ok(InputMode::Zenkaku),
"Ascii" => Ok(InputMode::Ascii),
s => Err(CskkError::ParseError(s.to_string())),
}
}
}
#[derive(Debug, PartialEq, Eq, Hash, Clone, Copy, Deserialize, Serialize)]
#[repr(C)]
pub enum CompositionMode {
Direct,
PreComposition,
PreCompositionOkurigana,
CompositionSelection,
Abbreviation,
Register,
}
impl FromStr for CompositionMode {
type Err = CskkError;
fn from_str(s: &str) -> Result<CompositionMode, CskkError> {
match s {
"Direct" => Ok(CompositionMode::Direct),
"PreComposition" => Ok(CompositionMode::PreComposition),
"PreCompositionOkurigana" => Ok(CompositionMode::PreCompositionOkurigana),
"CompositionSelection" => Ok(CompositionMode::CompositionSelection),
"Abbreviation" => Ok(CompositionMode::Abbreviation),
"Register" => Ok(CompositionMode::Register),
s => Err(CskkError::ParseError(s.to_string())),
}
}
}
pub fn has_rom2kana_conversion(input_mode: &InputMode, composition_mode: &CompositionMode) -> bool {
match composition_mode {
CompositionMode::Direct
| CompositionMode::PreComposition
| CompositionMode::PreCompositionOkurigana => matches!(
input_mode,
InputMode::Hiragana | InputMode::Katakana | InputMode::HankakuKatakana
),
_ => false,
}
}
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[repr(C)]
pub enum PeriodStyle {
PeriodJa,
PeriodEn,
}
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
#[repr(C)]
pub enum CommaStyle {
CommaJa,
CommaEn,
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn serde_check() {
let result = toml::to_string::<InputMode>(&InputMode::Hiragana).unwrap();
assert_eq!(r#""Hiragana""#, result);
let result = toml::from_str::<InputMode>(r#""Katakana""#).unwrap();
assert_eq!(InputMode::Katakana, result);
}
}