use std::ffi::c_char;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ConnectionType {
None,
Direct,
ViaProxy,
SimulatorServer,
Playback,
SimulatorClient,
Sweatbox,
Unknown(i32),
}
impl ConnectionType {
pub(crate) fn from_raw(value: i32) -> Self {
match value {
0 => Self::None,
1 => Self::Direct,
2 => Self::ViaProxy,
3 => Self::SimulatorServer,
4 => Self::Playback,
5 => Self::SimulatorClient,
6 => Self::Sweatbox,
other => Self::Unknown(other),
}
}
pub fn is_connected(self) -> bool {
self != Self::None
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum FlightPlanState {
NonConcerned,
Notified,
Coordinated,
TransferToMeInitiated,
TransferFromMeInitiated,
Assumed,
Redundant,
Other(i32),
}
impl FlightPlanState {
pub(crate) fn from_raw(value: i32) -> Self {
match value {
0 => Self::NonConcerned,
1 => Self::Notified,
2 => Self::Coordinated,
3 => Self::TransferToMeInitiated,
4 => Self::TransferFromMeInitiated,
5 => Self::Assumed,
7 => Self::Redundant,
other => Self::Other(other),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SimulationState {
NotStarted,
Simulated,
Terminated,
Other(i32),
}
impl SimulationState {
pub(crate) fn from_raw(value: i32) -> Self {
match value {
0 => Self::NotStarted,
1 => Self::Simulated,
2 => Self::Terminated,
other => Self::Other(other),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ControllerDataType {
Squawk,
FinalAltitude,
TemporaryAltitude,
CommunicationType,
ScratchPadString,
GroundState,
ClearanceFlag,
DepartureSequence,
Speed,
Mach,
Rate,
Heading,
DirectTo,
Other(i32),
}
impl ControllerDataType {
pub(crate) fn from_raw(value: i32) -> Self {
match value {
1 => Self::Squawk,
2 => Self::FinalAltitude,
3 => Self::TemporaryAltitude,
4 => Self::CommunicationType,
5 => Self::ScratchPadString,
6 => Self::GroundState,
7 => Self::ClearanceFlag,
8 => Self::DepartureSequence,
9 => Self::Speed,
10 => Self::Mach,
11 => Self::Rate,
12 => Self::Heading,
13 => Self::DirectTo,
other => Self::Other(other),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CoordinationState {
None,
RequestedByMe,
RequestedByOther,
Accepted,
Refused,
ManualAccepted,
Other(i32),
}
impl CoordinationState {
pub(crate) fn from_raw(value: i32) -> Self {
match value {
1 => Self::None,
2 => Self::RequestedByMe,
3 => Self::RequestedByOther,
4 => Self::Accepted,
5 => Self::Refused,
6 => Self::ManualAccepted,
other => Self::Other(other),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TagData {
UncorrelatedRadar,
FlightPlanTrack,
Correlated,
Other(i32),
}
impl TagData {
pub(crate) fn from_raw(value: i32) -> Self {
match value {
1 => Self::UncorrelatedRadar,
2 => Self::FlightPlanTrack,
3 => Self::Correlated,
other => Self::Other(other),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum TagColor {
Default,
Rgb,
NonConcerned,
Notified,
Assumed,
TransferToMeInitiated,
Redundant,
Information,
OngoingRequestFromMe,
OngoingRequestToMe,
OngoingRequestAccepted,
OngoingRequestRefused,
Emergency,
Other(i32),
}
impl TagColor {
pub(crate) fn to_raw(self) -> i32 {
match self {
Self::Default => 0,
Self::Rgb => 1,
Self::NonConcerned => 2,
Self::Notified => 3,
Self::Assumed => 4,
Self::TransferToMeInitiated => 5,
Self::Redundant => 6,
Self::Information => 7,
Self::OngoingRequestFromMe => 8,
Self::OngoingRequestToMe => 9,
Self::OngoingRequestAccepted => 10,
Self::OngoingRequestRefused => 11,
Self::Emergency => 12,
Self::Other(v) => v,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MouseButton {
Left,
Middle,
Right,
Other(i32),
}
impl MouseButton {
pub(crate) fn from_raw(value: i32) -> Self {
match value {
1 => Self::Left,
2 => Self::Middle,
3 => Self::Right,
other => Self::Other(other),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AirwayClass {
Valid,
DirectionError,
Unconnected,
NoDataDirect,
Other(i32),
}
impl AirwayClass {
pub(crate) fn from_raw(value: i32) -> Self {
match value {
0 => Self::Valid,
1 => Self::DirectionError,
2 => Self::Unconnected,
3 => Self::NoDataDirect,
other => Self::Other(other),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum RefreshPhase {
BackBitmap,
BeforeTags,
AfterTags,
AfterLists,
Other(i32),
}
impl RefreshPhase {
pub(crate) fn from_raw(value: i32) -> Self {
match value {
0 => Self::BackBitmap,
1 => Self::BeforeTags,
2 => Self::AfterTags,
3 => Self::AfterLists,
other => Self::Other(other),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SectorElementType {
Info,
Vor,
Ndb,
Airport,
Runway,
Fix,
Star,
Sid,
LowAirway,
HighAirway,
HighArtc,
Artc,
LowArtc,
Geo,
FreeText,
Airspace,
Position,
SidsStars,
Radars,
Regions,
All,
Other(i32),
}
impl SectorElementType {
pub(crate) fn to_raw(self) -> i32 {
match self {
Self::Info => 0,
Self::Vor => 1,
Self::Ndb => 2,
Self::Airport => 3,
Self::Runway => 4,
Self::Fix => 5,
Self::Star => 6,
Self::Sid => 7,
Self::LowAirway => 8,
Self::HighAirway => 9,
Self::HighArtc => 10,
Self::Artc => 11,
Self::LowArtc => 12,
Self::Geo => 13,
Self::FreeText => 14,
Self::Airspace => 15,
Self::Position => 16,
Self::SidsStars => 17,
Self::Radars => 18,
Self::Regions => 19,
Self::All => -1,
Self::Other(v) => v,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PopupCheck {
Unchecked,
Checked,
NoCheckbox,
}
impl PopupCheck {
pub(crate) fn to_raw(self) -> i32 {
match self {
Self::Unchecked => 0,
Self::Checked => 1,
Self::NoCheckbox => 2,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ControllerRating {
Unknown,
Observer,
S1,
S2,
S3,
C1,
C2,
C3,
I1,
I2,
I3,
Supervisor,
Administrator,
Other(i32),
}
impl ControllerRating {
pub(crate) fn from_raw(value: i32) -> Self {
match value {
0 => Self::Unknown,
1 => Self::Observer,
2 => Self::S1,
3 => Self::S2,
4 => Self::S3,
5 => Self::C1,
6 => Self::C2,
7 => Self::C3,
8 => Self::I1,
9 => Self::I2,
10 => Self::I3,
11 => Self::Supervisor,
12 => Self::Administrator,
other => Self::Other(other),
}
}
pub fn label(self) -> &'static str {
match self {
Self::Unknown | Self::Other(_) => "",
Self::Observer => "OBS",
Self::S1 => "S1",
Self::S2 => "S2",
Self::S3 => "S3",
Self::C1 => "C1",
Self::C2 => "C2",
Self::C3 => "C3",
Self::I1 => "I1",
Self::I2 => "I2",
Self::I3 => "I3",
Self::Supervisor => "SUP",
Self::Administrator => "ADM",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Facility {
Observer,
FlightService,
Delivery,
Ground,
Tower,
Approach,
Center,
Other(i32),
}
impl Facility {
pub(crate) fn from_raw(value: i32) -> Self {
match value {
0 => Self::Observer,
1 => Self::FlightService,
2 => Self::Delivery,
3 => Self::Ground,
4 => Self::Tower,
5 => Self::Approach,
6 => Self::Center,
other => Self::Other(other),
}
}
pub fn is_observer(self) -> bool {
matches!(self, Self::Observer)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CommunicationType {
Unassigned,
Voice,
ReceiveOnly,
TextOnly,
Other(c_char),
}
impl CommunicationType {
pub(crate) fn from_raw(value: c_char) -> Self {
match value.cast_unsigned() {
0 => Self::Unassigned,
b'V' => Self::Voice,
b'R' => Self::ReceiveOnly,
b'T' => Self::TextOnly,
other => Self::Other(other.cast_signed()),
}
}
pub(crate) fn to_raw(self) -> c_char {
let byte: u8 = match self {
Self::Unassigned => 0,
Self::Voice => b'V',
Self::ReceiveOnly => b'R',
Self::TextOnly => b'T',
Self::Other(c) => c.cast_unsigned(),
};
byte.cast_signed()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WakeCategory {
Unknown,
Light,
Medium,
Heavy,
Super,
Other(c_char),
}
impl WakeCategory {
pub(crate) fn from_raw(value: c_char) -> Self {
match value.cast_unsigned() {
0 | b'?' => Self::Unknown,
b'L' => Self::Light,
b'M' => Self::Medium,
b'H' => Self::Heavy,
b'J' => Self::Super,
other => Self::Other(other.cast_signed()),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AircraftCategory {
Unknown,
Landplane,
Seaplane,
Amphibian,
Helicopter,
Gyrocopter,
TiltWing,
Other(c_char),
}
impl AircraftCategory {
pub(crate) fn from_raw(value: c_char) -> Self {
match value.cast_unsigned() {
0 | b'?' => Self::Unknown,
b'L' => Self::Landplane,
b'S' => Self::Seaplane,
b'A' => Self::Amphibian,
b'H' => Self::Helicopter,
b'G' => Self::Gyrocopter,
b'T' => Self::TiltWing,
other => Self::Other(other.cast_signed()),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EngineType {
Unknown,
Piston,
Turboprop,
Jet,
Electric,
Other(c_char),
}
impl EngineType {
pub(crate) fn from_raw(value: c_char) -> Self {
match value.cast_unsigned() {
0 | b'?' => Self::Unknown,
b'P' => Self::Piston,
b'T' => Self::Turboprop,
b'J' => Self::Jet,
b'E' => Self::Electric,
other => Self::Other(other.cast_signed()),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum NavCapability {
Unknown,
NoDmeTransponderNoModeC,
NoDmeNoTransponder,
NoDmeTransponderModeC,
DmeNoTransponder,
DmeTransponderNoModeC,
DmeTransponderModeC,
TacanNoTransponder,
TacanTransponderNoModeC,
TacanTransponderModeC,
SimpleRnavNoTransponder,
SimpleRnavTransponderNoModeC,
SimpleRnavTransponderModeC,
AdvancedRnavDualFms,
AdvancedRnavSingleFms,
AdvancedRnavGnss,
AdvancedRnavRnp,
AdvancedRnavRvsm,
AdvancedRnavRnpRvsm,
Other(c_char),
}
impl NavCapability {
pub(crate) fn from_raw(value: c_char) -> Self {
match value.cast_unsigned() {
0 | b'?' => Self::Unknown,
b'T' => Self::NoDmeTransponderNoModeC,
b'X' => Self::NoDmeNoTransponder,
b'U' => Self::NoDmeTransponderModeC,
b'D' => Self::DmeNoTransponder,
b'B' => Self::DmeTransponderNoModeC,
b'A' => Self::DmeTransponderModeC,
b'M' => Self::TacanNoTransponder,
b'N' => Self::TacanTransponderNoModeC,
b'P' => Self::TacanTransponderModeC,
b'Y' => Self::SimpleRnavNoTransponder,
b'C' => Self::SimpleRnavTransponderNoModeC,
b'I' => Self::SimpleRnavTransponderModeC,
b'E' => Self::AdvancedRnavDualFms,
b'F' => Self::AdvancedRnavSingleFms,
b'G' => Self::AdvancedRnavGnss,
b'R' => Self::AdvancedRnavRnp,
b'W' => Self::AdvancedRnavRvsm,
b'Q' => Self::AdvancedRnavRnpRvsm,
other => Self::Other(other.cast_signed()),
}
}
}