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/// Agent is in guild.
14#[derive(Debug, Clone)]
15#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16pub struct GuildEvent {
17    /// Time of registering the event.
18    pub time: u64,
19
20    /// Agent that is in guild.
21    pub agent: AgentId,
22
23    /// Guild id in GW2 API form.
24    #[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}