chiark / gitweb /
wip keydata reorg
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 27 Jun 2020 12:18:19 +0000 (13:18 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 27 Jun 2020 12:18:19 +0000 (13:18 +0100)
src/gamestate.rs
src/keydata.rs

index d8e4d26eef7c0b39df06214f1cdab16b243f1777..f79bceee2ca45148149adc6e5334752258faf976 100644 (file)
@@ -27,13 +27,8 @@ display_consequential_impls!{VisiblePieceId}
 
 impl TryFrom<&str> for VisiblePieceId {
   type Error = AE;
-  fn try_from(s : &str) -> Result<VisiblePieceId,AE> {
-    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 {
index 9352892deaa4480168952d0c6e09d922a2959670..452816b4de895dfbb2da8ea1efa296c424ddd9fe 100644 (file)
@@ -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)
+}