1
//! PUS Service 3 Housekeeping
2
use num_enum::{IntoPrimitive, TryFromPrimitive};
3
#[cfg(feature = "serde")]
4
use serde::{Deserialize, Serialize};
5

            
6
2
#[derive(Debug, Eq, PartialEq, Copy, Clone, IntoPrimitive, TryFromPrimitive)]
7
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
9
#[repr(u8)]
10
pub enum Subservice {
11
    // Regular HK
12
    TcCreateHkReportStructure = 1,
13
    TcDeleteHkReportStructures = 3,
14
    TcEnableHkGeneration = 5,
15
    TcDisableHkGeneration = 6,
16
    TcReportHkReportStructures = 9,
17
    TmHkPacket = 25,
18
    TcGenerateOneShotHk = 27,
19
    TcModifyHkCollectionInterval = 31,
20

            
21
    // Diagnostics HK
22
    TcCreateDiagReportStructure = 2,
23
    TcDeleteDiagReportStructures = 4,
24
    TcEnableDiagGeneration = 7,
25
    TcDisableDiagGeneration = 8,
26
    TmHkStructuresReport = 10,
27
    TcReportDiagReportStructures = 11,
28
    TmDiagStructuresReport = 12,
29
    TmDiagPacket = 26,
30
    TcGenerateOneShotDiag = 28,
31
    TcModifyDiagCollectionInterval = 32,
32
}
33

            
34
#[cfg(test)]
35
mod tests {
36
    use super::*;
37
    #[test]
38
2
    fn test_try_from_u8() {
39
2
        let hk_report_subservice_raw = 25;
40
2
        let hk_report: Subservice = Subservice::try_from(hk_report_subservice_raw).unwrap();
41
2
        assert_eq!(hk_report, Subservice::TmHkPacket);
42
2
    }
43

            
44
    #[test]
45
2
    fn test_into_u8() {
46
2
        let hk_report_raw: u8 = Subservice::TmHkPacket.into();
47
2
        assert_eq!(hk_report_raw, 25);
48
2
    }
49

            
50
    #[test]
51
2
    fn test_partial_eq() {
52
2
        let hk_report_raw = Subservice::TmHkPacket;
53
2
        assert_ne!(hk_report_raw, Subservice::TcGenerateOneShotHk);
54
2
        assert_eq!(hk_report_raw, Subservice::TmHkPacket);
55
2
    }
56
    #[test]
57
2
    fn test_copy_clone() {
58
2
        let hk_report = Subservice::TmHkPacket;
59
2
        let hk_report_copy = hk_report;
60
2
        assert_eq!(hk_report, hk_report_copy);
61
2
    }
62
}