evtc\log/
mod.rs

1mod arc_build;
2mod error;
3
4pub use self::{arc_build::*, error::*};
5
6use crate::{extract::Extract, Event, StateChange, TryExtract};
7
8#[cfg(feature = "serde")]
9use serde::{Deserialize, Serialize};
10
11/// Log started, ended or target changed.
12#[derive(Debug, Clone)]
13#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
14pub struct LogEvent {
15    /// Time of registering the event.
16    pub time: u64,
17
18    /// Server Unix timestamp.
19    pub server_time: u32,
20
21    /// Local Unix timestamp.
22    pub local_time: u32,
23
24    /// Target species id (or ArcDPS id `0x637261`).
25    pub id: u64,
26}
27
28impl Extract for LogEvent {
29    #[inline]
30    unsafe fn extract(event: &Event) -> Self {
31        Self {
32            time: event.time,
33            server_time: event.value.cast_unsigned(),
34            local_time: event.buff_dmg.cast_unsigned(),
35            id: event.src_agent,
36        }
37    }
38}
39
40impl TryExtract for LogEvent {
41    #[inline]
42    fn can_extract(event: &Event) -> bool {
43        matches!(
44            event.get_statechange(),
45            StateChange::SquadCombatStart | StateChange::SquadCombatEnd | StateChange::LogNPCUpdate
46        )
47    }
48}