Skip to main content

sunspec/models/
model15.rs

1//! Interface Counters Model
2/// Interface Counters Model
3///
4/// Interface counters
5#[derive(Debug)]
6#[cfg_attr(feature = "serde", derive(::serde::Serialize, ::serde::Deserialize))]
7pub struct Model15 {
8    /// Clear
9    ///
10    /// Write a "1" to clear all counters
11    pub clr: Option<u16>,
12    /// Input Count
13    ///
14    /// Number of bytes received
15    pub in_cnt: Option<u32>,
16    /// Input Unicast Count
17    ///
18    /// Number of Unicast packets received
19    pub in_uc_cnt: Option<u32>,
20    /// Input Non-Unicast Count
21    ///
22    /// Number of non-Unicast packets received
23    pub in_n_uc_cnt: Option<u32>,
24    /// Input Discarded Count
25    ///
26    /// Number of inbound packets received on the interface but discarded
27    pub in_dsc_cnt: Option<u32>,
28    /// Input Error Count
29    ///
30    /// Number of inbound packets that contain errors (excluding discards)
31    pub in_err_cnt: Option<u32>,
32    /// Input Unknown Count
33    ///
34    /// Number of inbound packets with unknown protocol
35    pub in_unk_cnt: Option<u32>,
36    /// Output Count
37    ///
38    /// Total number of bytes transmitted on this interface
39    pub out_cnt: Option<u32>,
40    /// Output Unicast Count
41    ///
42    /// Number of Unicast packets transmitted
43    pub out_uc_cnt: Option<u32>,
44    /// Output Non-Unicast Count
45    ///
46    /// Number of Non-Unicast packets transmitted
47    pub out_n_uc_cnt: Option<u32>,
48    /// Output Discarded Count
49    ///
50    /// Number of Discarded output packets
51    pub out_dsc_cnt: Option<u32>,
52    /// Output Error Count
53    ///
54    /// Number of outbound error packets
55    pub out_err_cnt: Option<u32>,
56}
57#[allow(missing_docs)]
58impl Model15 {
59    pub const CLR: crate::Point<Self, Option<u16>> = crate::Point::new(0, 1, true);
60    pub const IN_CNT: crate::Point<Self, Option<u32>> = crate::Point::new(1, 2, false);
61    pub const IN_UC_CNT: crate::Point<Self, Option<u32>> = crate::Point::new(3, 2, false);
62    pub const IN_N_UC_CNT: crate::Point<Self, Option<u32>> = crate::Point::new(5, 2, false);
63    pub const IN_DSC_CNT: crate::Point<Self, Option<u32>> = crate::Point::new(7, 2, false);
64    pub const IN_ERR_CNT: crate::Point<Self, Option<u32>> = crate::Point::new(9, 2, false);
65    pub const IN_UNK_CNT: crate::Point<Self, Option<u32>> = crate::Point::new(11, 2, false);
66    pub const OUT_CNT: crate::Point<Self, Option<u32>> = crate::Point::new(13, 2, false);
67    pub const OUT_UC_CNT: crate::Point<Self, Option<u32>> = crate::Point::new(15, 2, false);
68    pub const OUT_N_UC_CNT: crate::Point<Self, Option<u32>> = crate::Point::new(17, 2, false);
69    pub const OUT_DSC_CNT: crate::Point<Self, Option<u32>> = crate::Point::new(19, 2, false);
70    pub const OUT_ERR_CNT: crate::Point<Self, Option<u32>> = crate::Point::new(21, 2, false);
71}
72impl crate::Group for Model15 {
73    const LEN: u16 = 24;
74}
75impl Model15 {
76    fn parse_group(data: &[u16]) -> Result<(&[u16], Self), crate::DecodeError> {
77        let nested_data = data
78            .get(usize::from(<Self as crate::Group>::LEN)..)
79            .unwrap_or(&[]);
80        Ok((
81            nested_data,
82            Self {
83                clr: Self::CLR.from_data(data)?,
84                in_cnt: Self::IN_CNT.from_data(data)?,
85                in_uc_cnt: Self::IN_UC_CNT.from_data(data)?,
86                in_n_uc_cnt: Self::IN_N_UC_CNT.from_data(data)?,
87                in_dsc_cnt: Self::IN_DSC_CNT.from_data(data)?,
88                in_err_cnt: Self::IN_ERR_CNT.from_data(data)?,
89                in_unk_cnt: Self::IN_UNK_CNT.from_data(data)?,
90                out_cnt: Self::OUT_CNT.from_data(data)?,
91                out_uc_cnt: Self::OUT_UC_CNT.from_data(data)?,
92                out_n_uc_cnt: Self::OUT_N_UC_CNT.from_data(data)?,
93                out_dsc_cnt: Self::OUT_DSC_CNT.from_data(data)?,
94                out_err_cnt: Self::OUT_ERR_CNT.from_data(data)?,
95            },
96        ))
97    }
98}
99impl crate::Model for Model15 {
100    const ID: u16 = 15;
101    fn addr(models: &crate::Models) -> crate::ModelAddr<Self> {
102        models.m15
103    }
104    fn parse(data: &[u16]) -> Result<Self, crate::ParseError<Self>> {
105        let (_, model) = Self::parse_group(data)?;
106        Ok(model)
107    }
108}