use std::time::Duration;
use derive_new::new;
use getset::{CopyGetters, Getters};
use crate::packet::header::Header;
#[derive(Debug, PartialEq, Copy, Clone, Eq, Ord, PartialOrd, Hash)]
pub enum DriverStatus {
InGarage,
FlyingLap,
InLap,
OutLap,
OnTrack,
}
impl Default for DriverStatus {
fn default() -> Self {
DriverStatus::InGarage
}
}
#[derive(Debug, PartialEq, Copy, Clone, Eq, Ord, PartialOrd, Hash)]
pub enum PitStatus {
None,
Pitting,
InPits,
}
impl Default for PitStatus {
fn default() -> Self {
PitStatus::None
}
}
#[derive(Debug, PartialEq, Copy, Clone, Eq, Ord, PartialOrd, Hash)]
pub enum ResultStatus {
Invalid,
Inactive,
Active,
Finished,
Disqualified,
NotClassified,
Retired,
}
impl Default for ResultStatus {
fn default() -> Self {
ResultStatus::Invalid
}
}
#[derive(Debug, PartialEq, Copy, Clone, Eq, Ord, PartialOrd, Hash)]
pub enum Sector {
First,
Second,
Third,
}
impl Default for Sector {
fn default() -> Self {
Sector::First
}
}
#[derive(new, Debug, Getters, CopyGetters, PartialEq, Copy, Clone, PartialOrd, Default)]
#[allow(clippy::too_many_arguments)]
pub struct Lap {
#[getset(get = "pub")]
last_lap_time: Duration,
#[getset(get = "pub")]
current_lap_time: Duration,
#[getset(get = "pub")]
best_lap_time: Duration,
#[getset(get = "pub")]
sector1_time: Duration,
#[getset(get = "pub")]
sector2_time: Duration,
#[getset(get_copy = "pub")]
lap_distance: f32,
#[getset(get_copy = "pub")]
total_distance: f32,
#[getset(get = "pub")]
safety_car_delta: Duration,
#[getset(get_copy = "pub")]
position: u8,
#[getset(get_copy = "pub")]
current_lap_number: u8,
#[getset(get_copy = "pub")]
pit_status: PitStatus,
#[getset(get_copy = "pub")]
sector: Sector,
#[getset(get_copy = "pub")]
is_valid_lap: bool,
#[getset(get_copy = "pub")]
penalties: u8,
#[getset(get_copy = "pub")]
grid_position: u8,
#[getset(get_copy = "pub")]
driver_status: DriverStatus,
#[getset(get_copy = "pub")]
result_status: ResultStatus,
}
#[derive(new, Debug, Getters, PartialEq, Clone, PartialOrd)]
pub struct LapPacket {
#[getset(get = "pub")]
header: Header,
#[getset(get = "pub")]
laps: Vec<Lap>,
}