From 2cac3918e79c4296382e8e541b821fe6a5112e28 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 27 Jun 2020 01:55:08 +0100 Subject: [PATCH] use serde derive --- src/gamestate.rs | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/src/gamestate.rs b/src/gamestate.rs index d9a269c1..673d5d99 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -5,8 +5,9 @@ slotmap::new_key_type!{ pub struct PieceId; } -#[derive(Copy,Clone,Serialize)] +#[derive(Copy,Clone,Serialize,Deserialize)] #[serde(into="String")] +#[serde(try_from="&str")] pub struct VisiblePieceId (pub u64); #[derive(Debug)] @@ -31,36 +32,15 @@ impl From for String { fn from(p: VisiblePieceId) -> String { format!("{}",p) } } -impl FromStr for VisiblePieceId { - type Err = AE; - fn from_str(s : &str) -> Result { +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))) } -//fn from(_: T) -> Self { todo!() }` -} - -struct VisiblePieceIdVisitor { } -impl<'de> serde::de::Visitor<'de> for VisiblePieceIdVisitor { - type Value = VisiblePieceId; - fn expecting(&self, f : &mut fmt::Formatter) -> fmt::Result { - write!(f,"(visible) piece id") - } - fn visit_str(self, s : &str) -> Result - where DE: serde::de::Error, - { - s.parse().map_err(DE::custom) - } -} - -impl<'de> Deserialize<'de> for VisiblePieceId { - fn deserialize(d: D) -> Result>::Error> - where D: serde::de::Deserializer<'de> { - d.deserialize_str(VisiblePieceIdVisitor{}) - } } impl PieceRenderInstructions { -- 2.30.2