mqtt/
qos.rs

1//! QoS (Quality of Services)
2
3use crate::packet::publish::QoSWithPacketIdentifier;
4
5#[repr(u8)]
6#[derive(Debug, Eq, PartialEq, Ord, PartialOrd, Copy, Clone)]
7pub enum QualityOfService {
8    Level0 = 0,
9    Level1 = 1,
10    Level2 = 2,
11}
12
13impl From<QoSWithPacketIdentifier> for QualityOfService {
14    fn from(qos: QoSWithPacketIdentifier) -> Self {
15        match qos {
16            QoSWithPacketIdentifier::Level0 => QualityOfService::Level0,
17            QoSWithPacketIdentifier::Level1(_) => QualityOfService::Level1,
18            QoSWithPacketIdentifier::Level2(_) => QualityOfService::Level2,
19        }
20    }
21}
22
23#[cfg(test)]
24mod test {
25    use super::*;
26    use std::cmp::min;
27
28    #[test]
29    fn min_qos() {
30        let q1 = QoSWithPacketIdentifier::Level1(0).into();
31        let q2 = QualityOfService::Level2;
32        assert_eq!(min(q1, q2), q1);
33
34        let q1 = QoSWithPacketIdentifier::Level0.into();
35        let q2 = QualityOfService::Level2;
36        assert_eq!(min(q1, q2), q1);
37
38        let q1 = QoSWithPacketIdentifier::Level2(0).into();
39        let q2 = QualityOfService::Level1;
40        assert_eq!(min(q1, q2), q2);
41    }
42}