use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SessionDetails {
#[serde(rename = "WeekendInfo")]
pub weekend: WeekendInfo,
#[serde(rename = "SessionInfo")]
pub session: SessionInfo,
#[serde(rename = "DriverInfo")]
pub drivers: DriverInfo,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct WeekendInfo {
pub track_name: String,
#[serde(rename = "TrackID")]
pub track_id: u32,
pub track_length: String,
pub track_display_name: String,
pub track_display_short_name: String,
pub track_config_name: String,
pub track_city: String,
pub track_country: String,
pub track_altitude: String,
pub track_latitude: String,
pub track_longitude: String,
pub track_north_offset: String,
#[serde(rename = "TrackNumTurns")]
pub track_turns: u32,
pub track_pit_speed_limit: String,
pub track_type: String,
#[serde(rename = "TrackWeatherType")]
pub track_weather: String,
pub track_skies: String,
#[serde(rename = "TrackSurfaceTemp")]
pub track_surface_temperature: String,
#[serde(rename = "TrackAirTemp")]
pub track_air_tempearture: String,
pub track_air_pressure: String,
#[serde(rename = "TrackWindVel")]
pub track_wind_speed: String,
#[serde(rename = "TrackWindDir")]
pub track_wind_direction: String,
pub track_fog_level: String,
pub track_cleanup: i32,
#[serde(rename = "TrackDynamicTrack")]
pub track_dynamic: i32,
#[serde(rename = "SeriesID")]
pub series_id: i32,
#[serde(rename = "SeasonID")]
pub season_id: i32,
#[serde(rename = "SessionID")]
pub session_id: i32,
#[serde(rename = "SubSessionID")]
pub sub_session_id: i32,
#[serde(rename = "LeagueID")]
pub league_id: i32,
pub official: i8,
pub race_week: i32,
pub event_type: String,
pub category: String,
pub sim_mode: String,
pub team_racing: i8,
pub min_drivers: i8,
pub max_drivers: i8,
#[serde(rename = "DCRuleSet")]
pub dc_rule_set: String,
pub qualifier_must_start_race: i8,
#[serde(rename = "NumCarClasses")]
pub n_classes: u32,
#[serde(rename = "NumCarTypes")]
pub n_car_types: u32,
#[serde(rename = "WeekendOptions")]
pub options: WeekendOptions,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct WeekendOptions {
#[serde(rename = "NumStarters")]
pub starters: u32,
pub starting_grid: String,
pub qualify_scoring: String,
pub course_cautions: String,
pub standing_start: i8,
pub restarts: String,
pub weather_type: String,
pub skies: String,
pub wind_direction: String,
pub wind_speed: String,
#[serde(rename = "WeatherTemp")]
pub temperature: String,
pub relative_humidity: String,
pub fog_level: String,
pub unofficial: i8,
pub commercial_mode: String,
pub night_mode: String,
pub is_fixed_setup: i8,
pub strict_laps_checking: String,
pub has_open_registration: i8,
pub hardcore_level: i8,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct SessionInfo {
#[serde(rename = "NumSessions")]
pub n_sessions: Option<u32>,
pub sessions: Vec<Session>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct Session {
#[serde(rename = "SessionNum")]
pub session_number: u64,
#[serde(rename = "SessionLaps")]
laps: serde_yaml::Value,
#[serde(rename = "SessionTime")]
pub time: String,
pub session_type: String,
#[serde(rename = "SessionTrackRubberState")]
pub track_rubber_state: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DriverInfo {
#[serde(rename = "DriverCarIdx")]
pub car_index: usize,
#[serde(rename = "DriverHeadPosX")]
pub head_position_x: f32,
#[serde(rename = "DriverHeadPosY")]
pub head_position_y: f32,
#[serde(rename = "DriverHeadPosZ")]
pub head_position_z: f32,
#[serde(rename = "DriverCarIdleRPM")]
pub idle_rpm: f32,
#[serde(rename = "DriverCarRedLine")]
pub red_line_rpm: f32,
#[serde(rename = "DriverCarFuelKgPerLtr")]
pub fuel_density: f32,
#[serde(rename = "DriverCarFuelMaxLtr")]
pub fuel_capacity: f32,
#[serde(rename = "DriverCarMaxFuelPct")]
pub fuel_max_fill_percent: f32,
#[serde(rename = "DriverCarSLFirstRPM")]
pub shift_light_first_rpm: f32,
#[serde(rename = "DriverCarSLShiftRPM")]
pub shift_light_shift_rpm: f32,
#[serde(rename = "DriverCarSLLastRPM")]
pub shift_light_last_rpm: f32,
#[serde(rename = "DriverCarSLBlinkRPM")]
pub shift_light_blink_rpm: f32,
#[serde(rename = "DriverPitTrkPct")]
pub pit_track_percent: f32,
#[serde(rename = "DriverCarEstLapTime")]
pub estimated_lap_time: f32,
#[serde(rename = "DriverSetupName")]
pub setup_name: String,
#[serde(rename = "DriverSetupIsModified")]
pub setup_is_modified: u8,
#[serde(rename = "DriverSetupPassedTech")]
pub setup_passed_tech: u8,
#[serde(rename = "Drivers")]
pub other_drivers: Vec<Driver>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct Driver {
#[serde(rename = "CarIdx")]
pub index: usize,
pub user_name: String,
pub abbrev_name: String,
pub initials: String,
#[serde(rename = "UserID")]
pub user_id: i64,
#[serde(rename = "TeamID")]
pub team_id: u64,
pub team_name: String,
#[serde(rename = "CarNumberRaw")]
pub car_number: u64,
pub car_path: String,
#[serde(rename = "CarClassID")]
pub car_class_id: u64,
#[serde(rename = "CarID")]
pub car_id: u64,
pub car_screen_name: String,
pub car_screen_name_short: String,
pub car_class_short_name: String,
#[serde(rename = "CarClassRelSpeed")]
pub car_class_relative_speed: i64,
pub car_class_license_level: i64,
#[serde(rename = "CarClassMaxFuelPct")]
pub car_class_max_fuel_percent: String,
pub car_class_weight_penalty: String,
pub car_class_color: String,
pub i_rating: i64,
#[serde(rename = "LicLevel")]
pub license_level: i64,
#[serde(rename = "LicSubLevel")]
pub license_sub_level: i64,
#[serde(rename = "LicString")]
pub license: String,
pub is_spectator: i8,
#[serde(rename = "CarDesignStr")]
pub car_design: String,
#[serde(rename = "CarSponsor_1")]
pub car_sponsor1: i64,
#[serde(rename = "CarSponsor_2")]
pub car_sponsor2: i64,
pub club_name: Option<String>,
pub division_name: Option<String>
}
impl Session {
pub fn max_laps(&self) -> Option<u64> {
self.laps.as_u64()
}
}