use crate::{error::Error, Read, Write};
use uuid::Uuid;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Clone, Debug, Default, Hash)]
pub struct LocalLevel {
pub serialization_version: i32,
pub level_id: Uuid,
pub level_version: i32,
pub level_name: String,
pub thumbnail: String,
pub creation_date: chrono::DateTime<chrono::Utc>,
pub update_date: chrono::DateTime<chrono::Utc>,
pub author_time: i64,
pub author_lap_times: Vec<i64>,
pub silver_medal_time: i64,
pub gold_medal_time: i64,
pub laps: i32,
pub private: bool,
pub nova_level: bool,
}
impl Read for LocalLevel {
fn read(input: &mut impl std::io::Read) -> Result<Self, Error> {
Ok(Self {
serialization_version: Read::read(input)?,
level_id: Read::read(input)?,
level_version: Read::read(input)?,
level_name: Read::read(input)?,
thumbnail: Read::read(input)?,
creation_date: Read::read(input)?,
update_date: Read::read(input)?,
author_time: Read::read(input)?,
author_lap_times: Read::read(input)?,
silver_medal_time: Read::read(input)?,
gold_medal_time: Read::read(input)?,
laps: Read::read(input)?,
private: Read::read(input)?,
nova_level: Read::read(input)?,
})
}
}
impl Write for LocalLevel {
fn write(&self, output: &mut impl std::io::Write) -> Result<(), Error> {
self.serialization_version.write(output)?;
self.level_id.write(output)?;
self.level_version.write(output)?;
self.level_name.write(output)?;
self.thumbnail.write(output)?;
self.creation_date.write(output)?;
self.update_date.write(output)?;
self.author_time.write(output)?;
self.author_lap_times.write(output)?;
self.silver_medal_time.write(output)?;
self.gold_medal_time.write(output)?;
self.laps.write(output)?;
self.private.write(output)?;
self.nova_level.write(output)
}
}
impl LocalLevel {
#[must_use]
pub fn default_with_id(level_id: Uuid) -> Self {
Self {
serialization_version: 18,
level_id,
level_name: String::from("New level"),
creation_date: chrono::Utc::now(),
update_date: chrono::Utc::now(),
laps: 1,
nova_level: true,
level_version: 1,
private: false,
..Default::default()
}
}
}