arcdps\extras\message/
mod.rs
1mod npc;
4mod squad;
5
6pub use self::{npc::*, squad::*};
7
8#[cfg(feature = "serde")]
9use serde::{Deserialize, Serialize};
10
11#[cfg(feature = "strum")]
12use strum::{Display, EnumCount, EnumIter, IntoStaticStr, VariantNames};
13
14#[derive(Clone, Copy)]
16#[repr(C)]
17pub union RawMessage {
18 squad: *const SquadMessage,
19 npc: *const NpcMessage,
20}
21
22#[derive(Debug, Clone)]
24pub enum Message<'a> {
25 Squad(&'a SquadMessage),
26 Npc(&'a NpcMessage),
27}
28
29impl Message<'_> {
30 #[inline]
32 pub unsafe fn new(message_type: MessageType, message: RawMessage) -> Self {
33 match message_type {
34 MessageType::Squad => Self::Squad(
35 message
36 .squad
37 .as_ref()
38 .expect("invalid unofficial extras squad message info"),
39 ),
40 MessageType::Npc => Self::Npc(
41 message
42 .npc
43 .as_ref()
44 .expect("invalid unofficial extras npc message info"),
45 ),
46 }
47 }
48}
49
50#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
52#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
53#[cfg_attr(
54 feature = "strum",
55 derive(Display, EnumCount, EnumIter, IntoStaticStr, VariantNames)
56)]
57#[repr(C)]
58pub enum MessageType {
59 Squad = 0,
61
62 Npc = 1,
64}