use crate::iracing::{BitField, VarData, VarType};
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq)]
pub enum CarPositions {
#[default]
Off = 0,
Clear = 1,
CarLeft = 2,
CarRight = 3,
CarLeftRight = 4,
CarsLeft = 5,
CarsRight = 6,
}
impl CarPositions {
pub fn car_left(self) -> bool {
match self {
CarPositions::CarLeft | CarPositions::CarLeftRight | CarPositions::CarsLeft => true,
CarPositions::Off
| CarPositions::Clear
| CarPositions::CarRight
| CarPositions::CarsRight => false,
}
}
pub fn car_right(self) -> bool {
match self {
CarPositions::CarRight | CarPositions::CarLeftRight | CarPositions::CarsRight => true,
CarPositions::Off
| CarPositions::Clear
| CarPositions::CarLeft
| CarPositions::CarsLeft => false,
}
}
}
impl VarData for CarPositions {
fn parse(var_type: VarType, data: &[u8]) -> Option<Self> {
let bit_field = BitField::parse(var_type, data)?;
Some(match bit_field.0 {
0 => CarPositions::Off,
1 => CarPositions::Clear,
2 => CarPositions::CarLeft,
3 => CarPositions::CarRight,
4 => CarPositions::CarLeftRight,
5 => CarPositions::CarsLeft,
6 => CarPositions::CarsRight,
_ => return None,
})
}
}