From 52fe1a112b493c035a671dcc49165b904cffcb33 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 27 Jun 2020 13:39:34 +0100 Subject: [PATCH] adjustable sep --- src/gamestate.rs | 6 ++++-- src/keydata.rs | 14 +++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/gamestate.rs b/src/gamestate.rs index bf325f7e..6aa8d438 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -26,14 +26,16 @@ pub type VisiblePieceIdSvgIds = &'static [&'static str]; impl Display for VisiblePieceId { #[throws(fmt::Error)] - fn fmt(&self, f : &mut fmt::Formatter) { slotkey_write(self.0,f)? } + fn fmt(&self, f : &mut fmt::Formatter) { slotkey_write(self.0,'.',f)? } } display_consequential_impls!{VisiblePieceId} impl TryFrom<&str> for VisiblePieceId { type Error = AE; #[throws(AE)] - fn try_from(s : &str) -> VisiblePieceId { VisiblePieceId(slotkey_parse(s)?) } + fn try_from(s : &str) -> VisiblePieceId { + VisiblePieceId(slotkey_parse(s,'.')?) + } } impl PieceRenderInstructions { diff --git a/src/keydata.rs b/src/keydata.rs index f8edaa52..58f25525 100644 --- a/src/keydata.rs +++ b/src/keydata.rs @@ -1,6 +1,8 @@ use crate::imports::*; +type SKD = slotmap::KeyData; + #[macro_export] macro_rules! display_consequential_impls { ( $x:path ) => { @@ -18,11 +20,17 @@ macro_rules! display_consequential_impls { pub use crate::display_consequential_impls; // this is madness! #[throws(AE)] -pub fn slotkey_parse(s : &str) -> slotmap::KeyData { +pub fn slotkey_parse(s : &str, sep : char) -> SKD { let e = || anyhow!("could not deserialise visibile piece id"); - let mut i = s.splitn(2,'.').map(|s| s.parse().map_err(|_| e())); + let mut i = s.splitn(2,sep).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)??; let v = ((h as u64) << 32) | (l as u64); - slotmap::KeyData::from_ffi(v) + SKD::from_ffi(v) +} + +#[throws(fmt::Error)] +pub fn slotkey_write(k : SKD, sep : char, f : &mut fmt::Formatter) { + let v = k.as_ffi(); + write!(f, "{}{}{}", v >> 32, sep, v & 0xffffffff)? } -- 2.30.2