1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#![warn(clippy::pedantic)]
#![allow(clippy::non_ascii_literal)]
#[cfg(test)]
mod tests {}
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
pub enum Color {
Kok1,
Huok2,
}
#[must_use]
pub fn serialize_color(color: Color) -> &'static str {
match color {
Color::Huok2 => "黒",
Color::Kok1 => "赤",
}
}
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
pub enum Profession {
Nuak1,
Kauk2,
Gua2,
Kaun1,
Dau2,
Maun1,
Kua2,
Tuk2,
Uai1,
Io,
}
#[must_use]
pub fn serialize_prof(prof: Profession) -> &'static str {
match prof {
Profession::Nuak1 => "船",
Profession::Kauk2 => "兵",
Profession::Gua2 => "弓",
Profession::Kaun1 => "車",
Profession::Dau2 => "虎",
Profession::Maun1 => "馬",
Profession::Kua2 => "筆",
Profession::Tuk2 => "巫",
Profession::Uai1 => "将",
Profession::Io => "王",
}
}
use std::str::FromStr;
impl FromStr for Profession {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
let s = s.to_lowercase();
match &*s {
"vessel" | "船" | "felkana" | "nuak1" | "muak1" | "pelkana" | "pijume" | "muak" => {
Ok(Profession::Nuak1)
}
"pawn" | "兵" | "elmer" | "kauk2" | "elme" | "kauk" => Ok(Profession::Kauk2),
"rook" | "弓" | "gustuer" | "gua2" | "kucte" | "kuctu" => Ok(Profession::Gua2),
"bishop" | "車" | "车" | "vadyrd" | "kaun1" | "badut" | "xije" | "kaun" => Ok(Profession::Kaun1),
"tiger" | "虎" | "stistyst" | "dau2" | "cictus" | "cucit" | "dau" => Ok(Profession::Dau2),
"horse" | "馬" | "马" | "dodor" | "maun1" | "dodo" | "maun" => Ok(Profession::Maun1),
"clerk" | "筆" | "笔" | "kua" | "kua2" | "kuwa" => Ok(Profession::Kua2),
"shaman" | "巫" | "terlsk" | "tuk2" | "tamcuk" | "tancuk" => Ok(Profession::Tuk2),
"general" | "将" | "varxle" | "uai1" | "baxule" | "xan" | "wai" => Ok(Profession::Uai1),
"king" | "王" | "ales" | "io" | "xet" | "caupla" => Ok(Profession::Io),
_ => Err(()),
}
}
}
impl FromStr for Color {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"red" | "赤" | "kok1" | "红" | "紅" => Ok(Color::Kok1),
"black" | "黒" | "Huok2" | "黑" => Ok(Color::Huok2),
_ => Err(()),
}
}
}
pub mod relative;
pub mod absolute;