aboutsummaryrefslogtreecommitdiff
path: root/src/parser.rs
diff options
context:
space:
mode:
authortslil clingman <>2020-02-09 13:42:15 -0800
committertslil clingman <>2020-02-09 13:42:15 -0800
commit84898338d0875c258a4325d517dd7b7f9d0f83e1 (patch)
tree23bb45a45915e3d31b431ded8a36d34926292696 /src/parser.rs
parent8413caf1d6429bade43a90e4b8d4a662f0fd7deb (diff)
Implemented variant start types, no check for bugfree yet
Diffstat (limited to 'src/parser.rs')
-rw-r--r--src/parser.rs41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/parser.rs b/src/parser.rs
index 68e49a8..c88d751 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -168,3 +168,44 @@ pub fn parse_action(stone_owner: Player, act: &str) -> Result<Action, String> {
parse_place(act, stone_owner)
}
}
+
+pub fn parse_start_type(st: &str) -> Result<StartType, String> {
+ let st = st.trim().to_uppercase();
+
+ if st == StartType::FCS.to_string() {
+ return Ok(StartType::FCS);
+ };
+
+ if st == StartType::FES.to_string() {
+ return Ok(StartType::FES);
+ };
+
+ if st == StartType::TPS.to_string() {
+ return Ok(StartType::TPS);
+ };
+
+ if st == StartType::CZS.to_string() {
+ return Ok(StartType::CZS);
+ };
+
+ if st.len() < 4 {
+ return Err(String::from(
+ "Expecting CPSn as alternatives failed to match, but variant string was too short.",
+ ));
+ } else {
+ if st[..3] == String::from("CPS") {
+ let num = st[3..].parse::<u8>();
+ match num {
+ Err(e) => {
+ return Err(format!(
+ "Failed to parse number, {}. CPS must be followed by a positive integer < 256, e.g., CPS2.",
+ e.to_string()
+ ))
+ }
+ Ok(n) => return Ok(StartType::CPS(n)),
+ }
+ }
+ }
+
+ return Err(format!("Unknown start type ``{}''", st));
+}