Skip to main content

rings_core/measure/
counter.rs

1/// The tag of counters in measure.
2#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
3pub enum MeasureCounter {
4    /// The number of sent messages.
5    Sent,
6    /// The number of failed to sent messages.
7    FailedToSend,
8    /// The number of received messages.
9    Received,
10    /// The number of failed to receive messages.
11    FailedToReceive,
12    /// The number of connected.
13    Connect,
14    /// The number of disconnect.
15    Disconnected,
16}
17
18impl MeasureCounter {
19    /// Discard byte payloads and name the compatibility counter for an event.
20    pub const fn from_event(event: rings_measure::MeasurementEvent) -> Self {
21        match event {
22            rings_measure::MeasurementEvent::Connected => Self::Connect,
23            rings_measure::MeasurementEvent::Disconnected => Self::Disconnected,
24            rings_measure::MeasurementEvent::Sent { .. } => Self::Sent,
25            rings_measure::MeasurementEvent::FailedToSend => Self::FailedToSend,
26            rings_measure::MeasurementEvent::Received { .. } => Self::Received,
27            rings_measure::MeasurementEvent::FailedToReceive => Self::FailedToReceive,
28        }
29    }
30
31    /// Construct a zero-byte event for a legacy counter increment.
32    ///
33    /// This bridge preserves reliability counts but cannot invent byte credit.
34    pub const fn into_event(self) -> rings_measure::MeasurementEvent {
35        match self {
36            Self::Sent => rings_measure::MeasurementEvent::Sent { useful_bytes: 0 },
37            Self::FailedToSend => rings_measure::MeasurementEvent::FailedToSend,
38            Self::Received => rings_measure::MeasurementEvent::Received { useful_bytes: 0 },
39            Self::FailedToReceive => rings_measure::MeasurementEvent::FailedToReceive,
40            Self::Connect => rings_measure::MeasurementEvent::Connected,
41            Self::Disconnected => rings_measure::MeasurementEvent::Disconnected,
42        }
43    }
44}