f1_game_packet_parser/packets/
final_classification.rs1use super::u8_to_usize;
2use crate::constants::{ActualTyreCompound, ResultStatus, VisualTyreCompound};
3
4use binrw::BinRead;
5use serde::{Deserialize, Serialize};
6
7const MAX_NUM_TYRE_STINTS: usize = 8;
8
9#[non_exhaustive]
10#[derive(BinRead, PartialEq, PartialOrd, Clone, Debug, Serialize, Deserialize)]
11#[br(little, import(_packet_format: u16))]
12pub struct FinalClassificationData {
13 pub position: u8,
15 pub num_laps: u8,
17 pub grid_position: u8,
19 pub points: u8,
21 pub num_pit_stops: u8,
23 pub result_status: ResultStatus,
25 pub best_lap_time_ms: u32,
27 pub total_race_time: f64,
29 pub penalties_time: u8,
31 pub num_penalties: u8,
33 #[br(
35 map(u8_to_usize),
36 assert(
37 num_tyre_stints <= MAX_NUM_TYRE_STINTS,
38 "Final classification entry has an invalid number of tyre stints: {}",
39 num_tyre_stints
40 )
41 )]
42 pub num_tyre_stints: usize,
43 #[br(count(num_tyre_stints), pad_after(MAX_NUM_TYRE_STINTS - num_tyre_stints))]
47 pub tyre_stints_actual: Vec<ActualTyreCompound>,
48 #[br(count(num_tyre_stints), pad_after(MAX_NUM_TYRE_STINTS - num_tyre_stints))]
52 pub tyre_stints_visual: Vec<VisualTyreCompound>,
53 #[br(count(num_tyre_stints), pad_after(MAX_NUM_TYRE_STINTS - num_tyre_stints))]
57 pub tyre_stints_end_laps: Vec<u8>,
58}