use super::Run;
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
pub struct SerDesRun {
pub game_title: String,
pub category: String,
pub ingame_time: bool,
pub offset: Option<i128>,
pub segment_names: Vec<String>,
pub rta_pb_splits: Vec<Option<u64>>,
pub igt_pb_splits: Vec<Option<u64>>,
pub rta_gold_segments: Vec<Option<u64>>,
pub igt_gold_segments: Vec<Option<u64>>,
pub rta_sum_segments: Vec<(usize, Option<u64>)>,
pub igt_sum_segments: Vec<(usize, Option<u64>)>,
}
impl From<SerDesRun> for Run {
fn from(r: SerDesRun) -> Run {
Run {
game_title: r.game_title,
category: r.category,
ingame_time: r.ingame_time,
offset: r.offset.into(),
segment_names: r.segment_names,
rta_pb_splits: r.rta_pb_splits.iter().map(|&t| t.into()).collect(),
igt_pb_splits: r.igt_pb_splits.iter().map(|&t| t.into()).collect(),
rta_gold_segments: r.rta_gold_segments.iter().map(|&t| t.into()).collect(),
igt_gold_segments: r.igt_gold_segments.iter().map(|&t| t.into()).collect(),
rta_sum_segments: r
.rta_sum_segments
.iter()
.map(|&(n, t)| (n, t.into()))
.collect(),
igt_sum_segments: r
.igt_sum_segments
.iter()
.map(|&(n, t)| (n, t.into()))
.collect(),
..Default::default()
}
}
}
impl From<&Run> for SerDesRun {
fn from(r: &Run) -> SerDesRun {
let mut ret = SerDesRun {
game_title: r.game_title.to_owned(),
category: r.category.to_owned(),
ingame_time: r.ingame_time,
offset: r.offset.into(),
segment_names: vec![],
rta_pb_splits: r.rta_pb_splits.iter().map(|&t| t.into()).collect(),
igt_pb_splits: r.igt_pb_splits.iter().map(|&t| t.into()).collect(),
rta_gold_segments: r.rta_gold_segments.iter().map(|&t| t.into()).collect(),
igt_gold_segments: r.igt_gold_segments.iter().map(|&t| t.into()).collect(),
rta_sum_segments: r
.rta_sum_segments
.iter()
.map(|&(n, t)| (n, t.into()))
.collect(),
igt_sum_segments: r
.igt_sum_segments
.iter()
.map(|&(n, t)| (n, t.into()))
.collect(),
};
r.segment_names.clone_into(&mut ret.segment_names);
ret
}
}