simconnect_sdk/domain/
notification.rs1use crate::{
2 Airport, ClientEvent, SimConnectError, SimConnectObjectExt, SystemEvent, Waypoint, NDB, VOR,
3};
4
5#[derive(Debug)]
7#[non_exhaustive]
8pub enum Notification {
9 Open,
11 ClientEvent(ClientEvent),
13 SystemEvent(SystemEvent),
15 Object(Object),
17 AirportList(Vec<Airport>),
19 WaypointList(Vec<Waypoint>),
21 NdbList(Vec<NDB>),
23 VorList(Vec<VOR>),
25 Quit,
27}
28
29#[derive(Debug)]
31pub struct Object {
32 pub(crate) type_name: String,
33 pub(crate) data_addr: *const u32,
34}
35
36impl Object {
37 pub fn try_transmute<T: SimConnectObjectExt, I>(&self) -> Result<I, SimConnectError> {
42 let type_name: String = std::any::type_name::<T>().into();
43
44 if self.type_name == type_name {
45 let data: I = unsafe { std::ptr::read_unaligned(self.data_addr as *const I) };
46 Ok(data)
47 } else {
48 Err(SimConnectError::ObjectMismatch {
49 actual: self.type_name.clone(),
50 expected: type_name,
51 })
52 }
53 }
54}