diff --git a/card_game/src/lib.rs b/card_game/src/lib.rs index 70f16a0..0dd30bb 100644 --- a/card_game/src/lib.rs +++ b/card_game/src/lib.rs @@ -422,6 +422,10 @@ pub enum SessionInstruction { } #[derive(Clone, Debug, Default)] +#[cfg_attr( + feature = "serde", + derive(serde_derive::Deserialize, serde_derive::Serialize) +)] pub struct SessionStats { inner: S, undos: u32, @@ -438,6 +442,10 @@ impl SessionStats { } } #[derive(Clone, Debug)] +#[cfg_attr( + feature = "serde", + derive(serde_derive::Deserialize, serde_derive::Serialize) +)] pub struct SessionConfig { pub inner: C, pub undo_penalty: i32, @@ -461,12 +469,26 @@ impl Default for SessionConfig { } #[derive(Clone, Debug)] +#[cfg_attr( + feature = "serde", + derive(serde_derive::Deserialize, serde_derive::Serialize), + serde(bound = " + G: serde::Serialize + for <'a> serde::Deserialize<'a>, + G::Stats: serde::Serialize + for <'a> serde::Deserialize<'a>, + G::Config: serde::Serialize + for <'a> serde::Deserialize<'a>, + Vec>: serde::Serialize + for <'a> serde::Deserialize<'a>, + ") +)] pub struct Session { stats: SessionStats, config: SessionConfig, state: SessionState, } #[derive(Clone, Debug)] +#[cfg_attr( + feature = "serde", + derive(serde_derive::Deserialize, serde_derive::Serialize) +)] pub struct StateSnapshot { state: G, instruction: G::Instruction, @@ -480,6 +502,14 @@ impl StateSnapshot { } } #[derive(Clone, Debug)] +#[cfg_attr( + feature = "serde", + derive(serde_derive::Deserialize, serde_derive::Serialize), + serde(bound = " + G: serde::Serialize + for <'a> serde::Deserialize<'a>, + Vec>: serde::Serialize + for <'a> serde::Deserialize<'a>, + ") +)] pub struct SessionState { state: G, history: Vec>,