evtc\agent/
health.rs
1use crate::{extract::Extract, AgentId, Event, StateChange, TryExtract};
2
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub struct MaxHealthEvent {
10 pub time: u64,
12
13 pub agent: AgentId,
15
16 pub max_health: u64,
18}
19
20impl Extract for MaxHealthEvent {
21 #[inline]
22 unsafe fn extract(event: &Event) -> Self {
23 Self {
24 time: event.time,
25 agent: AgentId::from_src(event),
26 max_health: event.dst_agent,
27 }
28 }
29}
30
31impl TryExtract for MaxHealthEvent {
32 #[inline]
33 fn can_extract(event: &Event) -> bool {
34 event.get_statechange() == StateChange::MaxHealthUpdate
35 }
36}
37
38#[derive(Debug, Clone)]
40#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
41pub struct HealthUpdateEvent {
42 pub time: u64,
44
45 pub agent: AgentId,
47
48 pub health: f32,
50}
51
52impl HealthUpdateEvent {
53 pub const CONVERT: f32 = 10_000.0;
55}
56
57impl Extract for HealthUpdateEvent {
58 #[inline]
59 unsafe fn extract(event: &Event) -> Self {
60 Self {
61 time: event.time,
62 agent: AgentId::from_src(event),
63 health: event.dst_agent as f32 / Self::CONVERT,
64 }
65 }
66}
67
68impl TryExtract for HealthUpdateEvent {
69 #[inline]
70 fn can_extract(event: &Event) -> bool {
71 event.get_statechange() == StateChange::HealthUpdate
72 }
73}
74
75#[derive(Debug, Clone)]
77#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
78pub struct BarrierUpdateEvent {
79 pub time: u64,
81
82 pub agent: AgentId,
84
85 pub barrier: f32,
87}
88
89impl BarrierUpdateEvent {
90 pub const CONVERT: f32 = 10_000.0;
92}
93
94impl Extract for BarrierUpdateEvent {
95 #[inline]
96 unsafe fn extract(event: &Event) -> Self {
97 Self {
98 time: event.time,
99 agent: AgentId::from_src(event),
100 barrier: event.dst_agent as f32 / Self::CONVERT,
101 }
102 }
103}
104
105impl TryExtract for BarrierUpdateEvent {
106 #[inline]
107 fn can_extract(event: &Event) -> bool {
108 event.get_statechange() == StateChange::BarrierUpdate
109 }
110}