evtc\player/
guild.rs
1use crate::{
2 content::GUID,
3 extract::{transmute_field, Extract},
4 AgentId, Event, StateChange, TryExtract,
5};
6
7#[cfg(feature = "serde")]
8use serde::{Deserialize, Serialize};
9
10#[cfg(feature = "serde")]
11use crate::content::serde_guid;
12
13#[derive(Debug, Clone)]
15#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16pub struct GuildEvent {
17 pub time: u64,
19
20 pub agent: AgentId,
22
23 #[cfg_attr(feature = "serde", serde(with = "serde_guid"))]
25 pub guild: GUID,
26}
27
28impl Extract for GuildEvent {
29 #[inline]
30 unsafe fn extract(event: &Event) -> Self {
31 Self {
32 time: event.time,
33 agent: AgentId::from_src(event),
34 guild: transmute_field!(event.dst_agent as GUID),
35 }
36 }
37}
38
39impl TryExtract for GuildEvent {
40 #[inline]
41 fn can_extract(event: &Event) -> bool {
42 event.get_statechange() == StateChange::Guild
43 }
44}