satrs_core/
res_code.rs

1#[cfg(feature = "serde")]
2use serde::{Deserialize, Serialize};
3use spacepackets::ecss::{EcssEnumU16, EcssEnumeration};
4use spacepackets::util::UnsignedEnum;
5use spacepackets::ByteConversionError;
6
7#[derive(Debug, Copy, Clone, PartialEq, Eq)]
8#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
9pub struct ResultU16 {
10    group_id: u8,
11    unique_id: u8,
12}
13
14impl ResultU16 {
15    pub const fn const_new(group_id: u8, unique_id: u8) -> Self {
16        Self {
17            group_id,
18            unique_id,
19        }
20    }
21    pub fn raw(&self) -> u16 {
22        ((self.group_id as u16) << 8) | self.unique_id as u16
23    }
24    pub fn group_id(&self) -> u8 {
25        self.group_id
26    }
27    pub fn unique_id(&self) -> u8 {
28        self.unique_id
29    }
30}
31
32impl From<ResultU16> for EcssEnumU16 {
33    fn from(v: ResultU16) -> Self {
34        EcssEnumU16::new(v.raw())
35    }
36}
37
38impl UnsignedEnum for ResultU16 {
39    fn size(&self) -> usize {
40        core::mem::size_of::<u16>()
41    }
42
43    fn write_to_be_bytes(&self, buf: &mut [u8]) -> Result<usize, ByteConversionError> {
44        if buf.len() < 2 {
45            return Err(ByteConversionError::ToSliceTooSmall {
46                found: buf.len(),
47                expected: 2,
48            });
49        }
50        buf[0] = self.group_id;
51        buf[1] = self.unique_id;
52        Ok(self.size())
53    }
54}
55
56impl EcssEnumeration for ResultU16 {
57    fn pfc(&self) -> u8 {
58        16
59    }
60}