use std::{fmt::Display, str::FromStr};
use serde::{Deserialize, Serialize};
use crate::{error::JPreprocessErrorKind, JPreprocessError};
#[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)]
pub enum Four {
Ka,
Ga,
Sa,
Ta,
Ba,
Ma,
Ra,
Ha,
}
impl FromStr for Four {
type Err = JPreprocessError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"カ行" => Ok(Self::Ka),
"ガ行" => Ok(Self::Ga),
"サ行" => Ok(Self::Sa),
"タ行" => Ok(Self::Ta),
"バ行" => Ok(Self::Ba),
"マ行" => Ok(Self::Ma),
"ラ行" => Ok(Self::Ra),
"ハ行" => Ok(Self::Ha),
_ => Err(JPreprocessErrorKind::CTypeParseError
.with_error(anyhow::anyhow!("Parse failed in Four"))),
}
}
}
impl Display for Four {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match &self {
Self::Ka => "カ行",
Self::Ga => "ガ行",
Self::Sa => "サ行",
Self::Ta => "タ行",
Self::Ba => "バ行",
Self::Ma => "マ行",
Self::Ra => "ラ行",
Self::Ha => "ハ行",
})
}
}