Compare commits
2 Commits
dd2e4ac3ae
...
9cc223c160
| Author | SHA1 | Date | |
|---|---|---|---|
| 9cc223c160 | |||
| f13d08a0a8 |
+29
-20
@@ -653,20 +653,6 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg_attr(
|
||||
feature = "serde",
|
||||
derive(serde_derive::Deserialize),
|
||||
serde(bound(deserialize = "
|
||||
G: serde::Deserialize<'de>,
|
||||
SessionConfig<G::Config>: serde::Deserialize<'de>,
|
||||
Vec<G::Instruction>: serde::Deserialize<'de>,
|
||||
"))
|
||||
)]
|
||||
struct SerializedSession<G: Game> {
|
||||
config: SessionConfig<G::Config>,
|
||||
state: G,
|
||||
history: Vec<G::Instruction>,
|
||||
}
|
||||
#[cfg(feature = "serde")]
|
||||
impl<'de, G: Game<Score = i32>> serde::de::Deserialize<'de> for Session<G>
|
||||
where
|
||||
@@ -680,6 +666,17 @@ where
|
||||
where
|
||||
D: serde::Deserializer<'de>,
|
||||
{
|
||||
#[derive(serde_derive::Deserialize)]
|
||||
#[serde(bound(deserialize = "
|
||||
G: serde::Deserialize<'de>,
|
||||
SessionConfig<G::Config>: serde::Deserialize<'de>,
|
||||
Vec<G::Instruction>: serde::Deserialize<'de>,
|
||||
"))]
|
||||
struct SerializedSession<G: Game> {
|
||||
config: SessionConfig<G::Config>,
|
||||
state: G,
|
||||
history: Vec<G::Instruction>,
|
||||
}
|
||||
let serialized = SerializedSession::deserialize(deserializer)?;
|
||||
let mut session = Session::new(serialized.state, serialized.config);
|
||||
for instruction in serialized.history {
|
||||
@@ -719,8 +716,18 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
use serde::ser::SerializeStruct;
|
||||
let mut map = serializer.serialize_struct("Session", 3)?;
|
||||
#[derive(serde_derive::Serialize)]
|
||||
#[serde(bound(serialize = "
|
||||
G: serde::Serialize,
|
||||
SessionConfig<G::Config>: serde::Serialize,
|
||||
G::Instruction: serde::Serialize,
|
||||
"))]
|
||||
struct SerializedSession<'a, G: Game> {
|
||||
config: &'a SessionConfig<G::Config>,
|
||||
state: &'a G,
|
||||
history: History<'a, G>,
|
||||
}
|
||||
|
||||
// serialize the initial state of the game.
|
||||
// if there is history, it is the first snapshot's state,
|
||||
// otherwise it is the current game state since there are no moves.
|
||||
@@ -729,9 +736,11 @@ where
|
||||
} else {
|
||||
&self.state.state
|
||||
};
|
||||
map.serialize_field("config", &self.config)?;
|
||||
map.serialize_field("state", state)?;
|
||||
map.serialize_field("history", &History(&self.state.history))?;
|
||||
map.end()
|
||||
let session = SerializedSession {
|
||||
config: &self.config,
|
||||
state,
|
||||
history: History(&self.state.history),
|
||||
};
|
||||
session.serialize(serializer)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user