jpreprocess_core/pos/
kigou.rs

1use std::{fmt::Display, str::FromStr};
2
3use serde::{Deserialize, Serialize};
4
5use super::{POSKind, POSParseError};
6
7#[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)]
8/// 記号
9pub enum Kigou {
10    /// \*
11    None,
12    /// アルファベット
13    Alphabet,
14    /// 一般
15    General,
16    /// 括弧開
17    KakkoOpen,
18    /// 括弧閉
19    KakkoClose,
20    /// 句点
21    Kuten,
22    /// 空白
23    Space,
24    /// 数
25    Kazu,
26    /// 読点
27    Touten,
28}
29
30impl FromStr for Kigou {
31    type Err = POSParseError;
32    fn from_str(s: &str) -> Result<Self, Self::Err> {
33        match s {
34            "*" => Ok(Self::None),
35            "アルファベット" => Ok(Self::Alphabet),
36            "一般" => Ok(Self::General),
37            "括弧開" => Ok(Self::KakkoOpen),
38            "括弧閉" => Ok(Self::KakkoClose),
39            "句点" => Ok(Self::Kuten),
40            "空白" => Ok(Self::Space),
41            "数" => Ok(Self::Kazu),
42            "読点" => Ok(Self::Touten),
43            _ => Err(POSParseError::new(1, s.to_string(), POSKind::Kigou)),
44        }
45    }
46}
47
48impl Display for Kigou {
49    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
50        write!(
51            f,
52            "{},*,*",
53            match &self {
54                Self::None => "*",
55                Self::Alphabet => "アルファベット",
56                Self::General => "一般",
57                Self::KakkoOpen => "括弧開",
58                Self::KakkoClose => "括弧閉",
59                Self::Kuten => "句点",
60                Self::Space => "空白",
61                Self::Kazu => "数",
62                Self::Touten => "読点",
63            },
64        )
65    }
66}