From: Ian Jackson Date: Sat, 27 Jun 2020 12:18:19 +0000 (+0100) Subject: wip keydata reorg X-Git-Tag: otter-0.2.0~1534 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=1f4e518a02d9ddcd18e49108904940afdeeceb39;p=otter.git wip keydata reorg --- diff --git a/src/gamestate.rs b/src/gamestate.rs index d8e4d26e..f79bceee 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -27,13 +27,8 @@ display_consequential_impls!{VisiblePieceId} impl TryFrom<&str> for VisiblePieceId { type Error = AE; - fn try_from(s : &str) -> Result { - let e = || anyhow!("could not deserialise visibile piece id"); - let mut i = s.splitn(2,'.').map(|s| s.parse().map_err(|_| e())); - let h : u32 = i.next().ok_or_else(e)??; - let l : u32 = i.next().ok_or_else(e)??; - Ok(VisiblePieceId(((h as u64) << 32) | (l as u64))) - } + #[throws(AE)] + fn try_from(s : &str) -> VisiblePieceId { VisiblePieceId(slotkey_parse(s)?) } } impl PieceRenderInstructions { diff --git a/src/keydata.rs b/src/keydata.rs index 9352892d..452816b4 100644 --- a/src/keydata.rs +++ b/src/keydata.rs @@ -1,4 +1,6 @@ +use crate::imports::*; + #[macro_export] macro_rules! display_consequential_impls { ( $x:path ) => { @@ -14,3 +16,12 @@ macro_rules! display_consequential_impls { } pub use crate::display_consequential_impls; // this is madness! + +#[throws(AE)] +pub fn slotkey_parse(s : &str) -> u64 { + let e = || anyhow!("could not deserialise visibile piece id"); + let mut i = s.splitn(2,'.').map(|s| s.parse().map_err(|_| e())); + let h : u32 = i.next().ok_or_else(e)??; + let l : u32 = i.next().ok_or_else(e)??; + ((h as u64) << 32) | (l as u64) +}