From 84898338d0875c258a4325d517dd7b7f9d0f83e1 Mon Sep 17 00:00:00 2001 From: tslil clingman <> Date: Sun, 9 Feb 2020 13:42:15 -0800 Subject: Implemented variant start types, no check for bugfree yet --- src/parser.rs | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'src/parser.rs') 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 { parse_place(act, stone_owner) } } + +pub fn parse_start_type(st: &str) -> Result { + 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::(); + 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)); +} -- cgit v1.3.1