refactor: replace SessionType enum with session_type submodule of constants

This commit is contained in:
Maciej Pędzich 2025-02-22 00:57:27 +01:00
parent 46d81ac97e
commit ac9408f720
Signed by: maciejpedzich
GPG Key ID: CE4A303D84882F0D
5 changed files with 41 additions and 43 deletions

View File

@ -2,6 +2,7 @@ pub mod driver_id;
pub mod team_id; pub mod team_id;
/// The wheel order is: `REAR_LEFT`, `REAR_RIGHT`, `FRONT_LEFT`, `FRONT_RIGHT`. /// The wheel order is: `REAR_LEFT`, `REAR_RIGHT`, `FRONT_LEFT`, `FRONT_RIGHT`.
pub mod wheel_index; pub mod wheel_index;
pub mod session_type;
use binrw::BinRead; use binrw::BinRead;
use bitflags::bitflags; use bitflags::bitflags;
@ -90,38 +91,6 @@ pub enum Weather {
Storm = 5, Storm = 5,
} }
#[non_exhaustive]
#[derive(
BinRead,
Eq,
PartialEq,
Ord,
PartialOrd,
Copy,
Clone,
Debug,
Hash,
Serialize,
Deserialize,
)]
#[br(little, repr(u8))]
pub enum SessionType {
Unknown = 0,
Practice1 = 1,
Practice2 = 2,
Practice3 = 3,
ShortPractice = 4,
Qualifying1 = 5,
Qualifying2 = 6,
Qualifying3 = 7,
ShortQualifying = 8,
OneShotQualifying = 9,
Race = 10,
Race2 = 11,
Race3 = 12,
TimeTrial = 13,
}
#[non_exhaustive] #[non_exhaustive]
#[derive( #[derive(
BinRead, BinRead,

View File

@ -0,0 +1,23 @@
pub const UNKNOWN: u8 = 0;
pub const PRACTICE_1: u8 = 1;
pub const PRACTICE_2: u8 = 2;
pub const PRACTICE_3: u8 = 3;
pub const SHORT_PRACTICE: u8 = 4;
pub const QUALIFYING_1: u8 = 5;
pub const QUALIFYING_2: u8 = 6;
pub const QUALIFYING_3: u8 = 7;
pub const SHORT_QUALIFYING: u8 = 8;
pub const ONE_SHOT_QUALIFYING: u8 = 9;
pub const SPRINT_1: u8 = 10;
pub const SPRINT_2: u8 = 11;
pub const SPRINT_3: u8 = 12;
pub const SHORT_SPRINT: u8 = 13;
pub const ONE_SHOT_SPRINT: u8 = 14;
pub const RACE_2024: u8 = 15;
pub const RACE_2_2024: u8 = 16;
pub const RACE_3_2024: u8 = 17;
pub const RACE: u8 = 10;
pub const RACE_2: u8 = 11;
pub const RACE_3: u8 = 12;
pub const TIME_TRIAL: u8 = 13;
pub const TIME_TRIAL_2024: u8 = 18;

View File

@ -18,7 +18,7 @@ use crate::constants::{
DynamicRacingLine, DynamicRacingLineType, FlashbackLimit, ForecastAccuracy, DynamicRacingLine, DynamicRacingLineType, FlashbackLimit, ForecastAccuracy,
FormationLapExperience, Formula, GameMode, GearboxAssist, LowFuelMode, MfdPanelIndex, FormationLapExperience, Formula, GameMode, GearboxAssist, LowFuelMode, MfdPanelIndex,
PitStopExperience, RaceStarts, RecoveryMode, RedFlags, RuleSet, SafetyCar, PitStopExperience, RaceStarts, RecoveryMode, RedFlags, RuleSet, SafetyCar,
SafetyCarExperience, SafetyCarStatus, SessionLength, SessionType, SpeedUnit, SafetyCarExperience, SafetyCarStatus, SessionLength, SpeedUnit,
SurfaceType, TemperatureUnit, TrackId, TyreTemperature, Weather, MAX_NUM_CARS, SurfaceType, TemperatureUnit, TrackId, TyreTemperature, Weather, MAX_NUM_CARS,
}; };
use crate::packets::car_damage::CarDamageData; use crate::packets::car_damage::CarDamageData;
@ -79,7 +79,9 @@ pub struct F1PacketSession {
/// Track's length in metres. /// Track's length in metres.
pub track_length: u16, pub track_length: u16,
/// Session's type. /// Session's type.
pub session_type: SessionType, /// See [`session_type`](mod@crate::constants::session_type)
/// for possible values.
pub session_type: u8,
/// Unique identifier of the track. /// Unique identifier of the track.
pub track_id: TrackId, pub track_id: TrackId,
/// Formula of cars being raced. /// Formula of cars being raced.
@ -347,7 +349,7 @@ pub struct F1PacketSession {
count(num_sessions_in_weekend), count(num_sessions_in_weekend),
pad_after(MAX_NUM_SESSIONS - num_sessions_in_weekend) pad_after(MAX_NUM_SESSIONS - num_sessions_in_weekend)
)] )]
pub weekend_structure: Vec<SessionType>, pub weekend_structure: Vec<u8>,
/// Distance (in metres) around the track where sector 2 starts. /// Distance (in metres) around the track where sector 2 starts.
/// Available from the 2024 format onwards. /// Available from the 2024 format onwards.
#[br(if(packet_format >= 2024))] #[br(if(packet_format >= 2024))]
@ -716,19 +718,19 @@ pub struct F1PacketTimeTrial {
} }
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub(crate) struct InvalidBool(u8); pub(crate) struct InvalidBoolValue(u8);
impl fmt::Display for InvalidBool { impl fmt::Display for InvalidBoolValue {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "Invalid bool value: {}", self.0) write!(f, "Invalid bool value: {}", self.0)
} }
} }
pub(crate) fn u8_to_bool(value: u8) -> Result<bool, InvalidBool> { pub(crate) fn u8_to_bool(value: u8) -> Result<bool, InvalidBoolValue> {
match value { match value {
0 => Ok(false), 0 => Ok(false),
1 => Ok(true), 1 => Ok(true),
_ => Err(InvalidBool(value)), _ => Err(InvalidBoolValue(value)),
} }
} }

View File

@ -1,4 +1,4 @@
use crate::constants::{MarshalZoneFlag, SessionType, TemperatureChange, Weather}; use crate::constants::{MarshalZoneFlag, TemperatureChange, Weather};
use binrw::BinRead; use binrw::BinRead;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -43,7 +43,9 @@ pub struct MarshalZone {
)] )]
pub struct WeatherForecastSample { pub struct WeatherForecastSample {
/// Session's type. /// Session's type.
pub session_type: SessionType, /// See [`session_type`](mod@crate::constants::session_type)
/// for possible values.
pub session_type: u8,
/// Time in minutes the forecast is for. /// Time in minutes the forecast is for.
pub time_offset: u8, pub time_offset: u8,
/// Forecasted weather. /// Forecasted weather.

View File

@ -1,5 +1,5 @@
use super::u8_to_bool; use super::u8_to_bool;
use crate::constants::{ActualTyreCompound, SessionType, VisualTyreCompound}; use crate::constants::{ActualTyreCompound, VisualTyreCompound};
use binrw::BinRead; use binrw::BinRead;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -30,7 +30,9 @@ pub struct TyreSetData {
#[br(try_map(u8_to_bool))] #[br(try_map(u8_to_bool))]
pub available: bool, pub available: bool,
/// Recommended session for this tyre set. /// Recommended session for this tyre set.
pub recommended_session: SessionType, /// See [`session_type`](mod@crate::constants::session_type)
/// for possible values.
pub recommended_session: u8,
/// Laps left in this set. /// Laps left in this set.
pub life_span: u8, pub life_span: u8,
/// Max number of laps recommended for this compound. /// Max number of laps recommended for this compound.