pub struct EventMetadata { /* private fields */ }Expand description
Fields shared by every event: timestamp, raw bytes, and raw-bytes hash.
Constructed via EventMetadata::new, which computes the raw_bytes_hash
from raw_bytes to enforce the invariant that the hash always matches.
This is critical for server-side deduplication via event fingerprints.
The timestamp is Option<DateTime<Utc>> because some log entries lack
a parseable timestamp in the header. None means “no timestamp found in
the log entry” — downstream consumers must handle this explicitly rather
than receiving a synthetic Utc::now() that would break fingerprinting
and chronological ordering.
All fields are private to protect the hash invariant. Use the accessor methods to read them.
Deserialization also enforces this invariant: the hash is recomputed from
raw_bytes during deserialization rather than trusting the serialized value.
Implementations§
Source§impl EventMetadata
impl EventMetadata
Sourcepub fn new(timestamp: Option<DateTime<Utc>>, raw_bytes: Vec<u8>) -> Self
pub fn new(timestamp: Option<DateTime<Utc>>, raw_bytes: Vec<u8>) -> Self
Creates a new EventMetadata, computing raw_bytes_hash as the
SHA-256 digest of raw_bytes.
timestamp is None when the log entry header did not contain a
parseable timestamp. This preserves the distinction between “real
timestamp from the log” and “no timestamp available” for downstream
consumers.
instant_utc is set to None. Use EventMetadata::with_instant
when a true UTC instant is available from an embedded epoch-ms field.
Sourcepub fn with_instant(
timestamp: Option<DateTime<Utc>>,
instant_utc: Option<DateTime<Utc>>,
raw_bytes: Vec<u8>,
) -> Self
pub fn with_instant( timestamp: Option<DateTime<Utc>>, instant_utc: Option<DateTime<Utc>>, raw_bytes: Vec<u8>, ) -> Self
Creates a new EventMetadata with a true UTC instant from an embedded
epoch-ms timestamp in the event payload, computing raw_bytes_hash as
the SHA-256 digest of raw_bytes.
timestamp is the local wall-clock value parsed from the log entry
header (mislabeled as UTC — see EventMetadata::local_timestamp).
instant_utc is the true UTC instant derived from the event payload’s
embedded "timestamp" field (epoch-milliseconds). Pass None when the
embedded field is absent or unparseable.
Sourcepub fn local_timestamp(&self) -> Option<NaiveDateTime>
pub fn local_timestamp(&self) -> Option<NaiveDateTime>
Returns the local wall-clock timestamp from the log entry header, or
None if the entry did not contain a parseable timestamp.
The returned value is a zone-less NaiveDateTime representing the
player’s local time as written in the log header. The MTGA log does not
include timezone information, so no UTC conversion is applied.
For the true UTC instant (where available), use EventMetadata::instant_utc.
Sourcepub fn instant_utc(&self) -> Option<DateTime<Utc>>
pub fn instant_utc(&self) -> Option<DateTime<Utc>>
Returns the true UTC instant derived from the event’s embedded
epoch-ms field, or None when no embedded timestamp is available.
Populated for match-lifecycle events (matchGameRoomStateChangedEvent).
All other events return None; fall back to EventMetadata::local_timestamp
in that case.
Sourcepub fn timestamp(&self) -> Option<DateTime<Utc>>
👎Deprecated: header timestamps are local wall-clock mislabeled as UTC; use instant_utc() for the true UTC instant (match-lifecycle events) or local_timestamp() for the zone-less local header value
pub fn timestamp(&self) -> Option<DateTime<Utc>>
header timestamps are local wall-clock mislabeled as UTC; use instant_utc() for the true UTC instant (match-lifecycle events) or local_timestamp() for the zone-less local header value
Returns the log-header timestamp, mislabeled as UTC.
The underlying value is a local wall-clock NaiveDateTime promoted
with .and_utc(), so the DateTime<Utc> type is misleading: the
inner value is not a true UTC instant.
Prefer EventMetadata::instant_utc for the absolute UTC instant
(available for match-lifecycle events), or
EventMetadata::local_timestamp for the honest zone-less local time.
Sourcepub fn raw_bytes_hash(&self) -> &[u8; 32]
pub fn raw_bytes_hash(&self) -> &[u8; 32]
Returns the SHA-256 hash of raw_bytes.
Trait Implementations§
Source§impl Clone for EventMetadata
impl Clone for EventMetadata
Source§fn clone(&self) -> EventMetadata
fn clone(&self) -> EventMetadata
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for EventMetadata
impl Debug for EventMetadata
Source§impl<'de> Deserialize<'de> for EventMetadata
Custom Deserialize that recomputes raw_bytes_hash from raw_bytes,
ensuring the hash invariant survives serialization round-trips.
impl<'de> Deserialize<'de> for EventMetadata
Custom Deserialize that recomputes raw_bytes_hash from raw_bytes,
ensuring the hash invariant survives serialization round-trips.
Source§fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>where
D: Deserializer<'de>,
Source§impl PartialEq for EventMetadata
impl PartialEq for EventMetadata
Source§fn eq(&self, other: &EventMetadata) -> bool
fn eq(&self, other: &EventMetadata) -> bool
self and other values to be equal, and is used by ==.