evtc\log/
error.rs

1use crate::{
2    extract::{transmute_field, Extract},
3    Event, StateChange, TryExtract,
4};
5
6#[cfg(feature = "serde")]
7use serde::{Deserialize, Serialize};
8
9/// ArcDPS log error.
10#[derive(Debug, Clone)]
11#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12pub struct ErrorEvent {
13    /// Error message.
14    pub message: String,
15}
16
17impl ErrorEvent {
18    pub const MAX_LEN: usize = 32;
19}
20
21impl Extract for ErrorEvent {
22    #[inline]
23    unsafe fn extract(event: &Event) -> Self {
24        let bytes = transmute_field!(event.time as [u8; ErrorEvent::MAX_LEN]);
25
26        Self {
27            message: String::from_utf8_lossy(&bytes)
28                .trim_end_matches('\0')
29                .into(),
30        }
31    }
32}
33
34impl TryExtract for ErrorEvent {
35    #[inline]
36    fn can_extract(event: &Event) -> bool {
37        event.get_statechange() == StateChange::Integrity
38    }
39}