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 {
use crate::imports::*;
+type SKD = slotmap::KeyData;
+
#[macro_export]
macro_rules! display_consequential_impls {
( $x:path ) => {
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)?
}