jpreprocess_core/pos/
kigou.rs1use std::{fmt::Display, str::FromStr};
2
3use serde::{Deserialize, Serialize};
4
5use super::{POSKind, POSParseError};
6
7#[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)]
8pub enum Kigou {
10 None,
12 Alphabet,
14 General,
16 KakkoOpen,
18 KakkoClose,
20 Kuten,
22 Space,
24 Kazu,
26 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}