diff options
| author | tslil clingman <> | 2020-02-09 13:42:15 -0800 |
|---|---|---|
| committer | tslil clingman <> | 2020-02-09 13:42:15 -0800 |
| commit | 84898338d0875c258a4325d517dd7b7f9d0f83e1 (patch) | |
| tree | 23bb45a45915e3d31b431ded8a36d34926292696 /src/parser.rs | |
| parent | 8413caf1d6429bade43a90e4b8d4a662f0fd7deb (diff) | |
Implemented variant start types, no check for bugfree yet
Diffstat (limited to 'src/parser.rs')
| -rw-r--r-- | src/parser.rs | 41 |
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)); +} |
