for (gpid, pr) in &g.gs.pieces {
let id : slotmap::KeyData = gpid.into();
let pri = PieceRenderInstructions {
- id : VisiblePieceId(id.as_ffi()),
+ id : VisiblePieceId { uncensored : id },
face : pr.face,
};
defs.push(format!(r##"<g id="{}">{}</g>"##,
#[derive(Copy,Clone,Serialize,Deserialize)]
#[serde(into="String")]
#[serde(try_from="&str")]
-pub struct VisiblePieceId (pub u64);
+pub struct VisiblePieceId { pub uncensored : slotmap::KeyData }
#[derive(Debug)]
pub struct PieceRenderInstructions {
impl Display for VisiblePieceId {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
- write!(f, "{}.{}", self.0 >> 32, self.0 & 0xffffffff)
+ let v = self.uncensored.as_ffi();
+ write!(f, "{}.{}", v >> 32, v & 0xffffffff)
}
}
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{ uncensored : slotkey_parse(s)? }
+ }
}
impl PieceRenderInstructions {
pub use crate::display_consequential_impls; // this is madness!
#[throws(AE)]
-pub fn slotkey_parse(s : &str) -> u64 {
+pub fn slotkey_parse(s : &str) -> slotmap::KeyData {
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)
+ let v = ((h as u64) << 32) | (l as u64);
+ slotmap::KeyData::from_ffi(v)
}