serde impl #16

Merged
Quaternions merged 25 commits from serde into master 2026-06-09 17:15:25 +00:00
Showing only changes of commit e256e60e91 - Show all commits
+30
View File
1
@@ -422,6 +422,10 @@ pub enum SessionInstruction<I> {
}
#[derive(Clone, Debug, Default)]
#[cfg_attr(
feature = "serde",
derive(serde_derive::Deserialize, serde_derive::Serialize)
)]
pub struct SessionStats<S> {
inner: S,
undos: u32,
@@ -438,6 +442,10 @@ impl<S> SessionStats<S> {
}
}
#[derive(Clone, Debug)]
#[cfg_attr(
feature = "serde",
derive(serde_derive::Deserialize, serde_derive::Serialize)
)]
pub struct SessionConfig<C> {
pub inner: C,
pub undo_penalty: i32,
@@ -461,12 +469,26 @@ impl<C: Default> Default for SessionConfig<C> {
}
#[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<StateSnapshot<G>>: serde::Serialize + for <'a> serde::Deserialize<'a>,
")
)]
pub struct Session<G: Game> {
stats: SessionStats<G::Stats>,
config: SessionConfig<G::Config>,
state: SessionState<G>,
}
#[derive(Clone, Debug)]
#[cfg_attr(
feature = "serde",
derive(serde_derive::Deserialize, serde_derive::Serialize)
)]
pub struct StateSnapshot<G: Game> {
state: G,
instruction: G::Instruction,
@@ -480,6 +502,14 @@ impl<G: Game> StateSnapshot<G> {
}
}
#[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<StateSnapshot<G>>: serde::Serialize + for <'a> serde::Deserialize<'a>,
")
)]
pub struct SessionState<G: Game> {
state: G,
history: Vec<StateSnapshot<G>>,