diff --git a/card_game/src/lib.rs b/card_game/src/lib.rs index 15bbe1a..91751d8 100644 --- a/card_game/src/lib.rs +++ b/card_game/src/lib.rs @@ -656,27 +656,29 @@ where #[cfg(feature = "serde")] impl<'de, G: Game> serde::de::DeserializeSeed<'de> for Session where - G: serde::Deserialize<'de>, + G: serde::Deserialize<'de> + Clone, G::Instruction: serde::Deserialize<'de>, { type Value = SessionState; - fn deserialize(deserializer: D) -> Result + fn deserialize(self, deserializer: D) -> Result where D: serde::Deserializer<'de>, { - struct SessionStateVisitor { + struct SessionStateVisitor { state: G, + stats: SessionStats, + config: SessionConfig, } impl<'de, G: Game> serde::de::Visitor<'de> for SessionStateVisitor where - G: serde::Deserialize<'de>, + G: serde::Deserialize<'de> + Clone, G::Instruction: serde::Deserialize<'de>, { type Value = SessionState; fn expecting(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { write!(f, "State History") } - fn visit_seq(self, mut seq: A) -> Result + fn visit_seq(mut self, mut seq: A) -> Result where A: serde::de::SeqAccess<'de>, { @@ -690,13 +692,21 @@ where state: state.clone(), instruction: instruction.clone(), }); - state.process_instruction(stats, config, instruction); + state.process_instruction( + &mut self.stats.inner, + &self.config.inner, + instruction, + ); } Ok(SessionState { state, history }) } } let state = G::deserialize(deserializer)?; - deserializer.deserialize_seq(SessionStateVisitor { state }) + deserializer.deserialize_seq(SessionStateVisitor { + state, + stats: self.stats, + config: self.config, + }) } } #[cfg(feature = "serde")]