jpreprocess_core/ctype/
four.rs

1use std::{fmt::Display, str::FromStr};
2
3use serde::{Deserialize, Serialize};
4
5use super::{CTypeKind, CTypeParseError};
6
7#[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)]
8/// 四段
9pub enum Four {
10    /// カ行
11    Ka,
12    /// ガ行
13    Ga,
14    /// サ行
15    Sa,
16    /// タ行
17    Ta,
18    /// バ行
19    Ba,
20    /// マ行
21    Ma,
22    /// ラ行
23    Ra,
24    /// ハ行
25    Ha,
26}
27
28impl FromStr for Four {
29    type Err = CTypeParseError;
30    fn from_str(s: &str) -> Result<Self, Self::Err> {
31        match s {
32            "カ行" => Ok(Self::Ka),
33            "ガ行" => Ok(Self::Ga),
34            "サ行" => Ok(Self::Sa),
35            "タ行" => Ok(Self::Ta),
36            "バ行" => Ok(Self::Ba),
37            "マ行" => Ok(Self::Ma),
38            "ラ行" => Ok(Self::Ra),
39            "ハ行" => Ok(Self::Ha),
40            _ => Err(CTypeParseError::new(s.to_string(), CTypeKind::Four)),
41        }
42    }
43}
44
45impl Display for Four {
46    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
47        f.write_str(match &self {
48            Self::Ka => "カ行",
49            Self::Ga => "ガ行",
50            Self::Sa => "サ行",
51            Self::Ta => "タ行",
52            Self::Ba => "バ行",
53            Self::Ma => "マ行",
54            Self::Ra => "ラ行",
55            Self::Ha => "ハ行",
56        })
57    }
58}