diff --git a/src/tc.rs b/src/tc.rs index bce69ab..184e799 100644 --- a/src/tc.rs +++ b/src/tc.rs @@ -213,21 +213,27 @@ impl PusTcSecondaryHeader { /// serde provider like [postcard](https://docs.rs/postcard/latest/postcard/). /// /// There is no spare bytes support yet. +/// +/// # Lifetimes +/// +/// * `'raw_data` - If the TC is not constructed from a raw slice, this will be the life time of +/// a buffer where the user provided application data will be serialized into. If it +/// is, this is the lifetime of the raw byte slice it is constructed from. #[derive(Eq, Copy, Clone, Debug)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -pub struct PusTc<'app_data> { +pub struct PusTc<'raw_data> { sp_header: SpHeader, pub sec_header: PusTcSecondaryHeader, /// If this is set to false, a manual call to [PusTc::calc_own_crc16] or /// [PusTc::update_packet_fields] is necessary for the serialized or cached CRC16 to be valid. pub calc_crc_on_serialization: bool, #[cfg_attr(feature = "serde", serde(skip))] - raw_data: Option<&'app_data [u8]>, - app_data: Option<&'app_data [u8]>, + raw_data: Option<&'raw_data [u8]>, + app_data: Option<&'raw_data [u8]>, crc16: Option, } -impl<'app_data> PusTc<'app_data> { +impl<'raw_data> PusTc<'raw_data> { /// Generates a new struct instance. /// /// # Arguments @@ -243,7 +249,7 @@ impl<'app_data> PusTc<'app_data> { pub fn new( sp_header: &mut SpHeader, sec_header: PusTcSecondaryHeader, - app_data: Option<&'app_data [u8]>, + app_data: Option<&'raw_data [u8]>, set_ccsds_len: bool, ) -> Self { sp_header.set_packet_type(PacketType::Tc); @@ -268,7 +274,7 @@ impl<'app_data> PusTc<'app_data> { sph: &mut SpHeader, service: u8, subservice: u8, - app_data: Option<&'app_data [u8]>, + app_data: Option<&'raw_data [u8]>, set_ccsds_len: bool, ) -> Self { Self::new( @@ -405,7 +411,7 @@ impl<'app_data> PusTc<'app_data> { /// Create a [PusTc] instance from a raw slice. On success, it returns a tuple containing /// the instance and the found byte length of the packet. - pub fn from_bytes(slice: &'app_data [u8]) -> Result<(Self, usize), PusError> { + pub fn from_bytes(slice: &'raw_data [u8]) -> Result<(Self, usize), PusError> { let raw_data_len = slice.len(); if raw_data_len < PUS_TC_MIN_LEN_WITHOUT_APP_DATA { return Err(PusError::RawDataTooShort(raw_data_len)); @@ -435,7 +441,14 @@ impl<'app_data> PusTc<'app_data> { Ok((pus_tc, total_len)) } - pub fn raw(&self) -> Option<&'app_data [u8]> { + #[deprecated(since = "0.5.2", note = "use raw_bytes() instead")] + pub fn raw(&self) -> Option<&'raw_data [u8]> { + self.raw_bytes() + } + + /// If [Self] was constructed [Self::from_bytes], this function will return the slice it was + /// constructed from. Otherwise, [None] will be returned. + pub fn raw_bytes(&self) -> Option<&'raw_data [u8]> { self.raw_data } } diff --git a/src/tm.rs b/src/tm.rs index d9f435a..fb8e079 100644 --- a/src/tm.rs +++ b/src/tm.rs @@ -200,23 +200,24 @@ impl<'slice> TryFrom> for PusTmSecondaryHeader<'slice /// /// # Lifetimes /// -/// * `'src_data` - Life time of a buffer where the user provided time stamp and source data will -/// be serialized into. +/// * `'raw_data` - If the TM is not constructed from a raw slice, this will be the life time of +/// a buffer where the user provided time stamp and source data will be serialized into. If it +/// is, this is the lifetime of the raw byte slice it is constructed from. #[derive(Eq, Debug, Copy, Clone)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -pub struct PusTm<'src_data> { +pub struct PusTm<'raw_data> { pub sp_header: SpHeader, - pub sec_header: PusTmSecondaryHeader<'src_data>, + pub sec_header: PusTmSecondaryHeader<'raw_data>, /// If this is set to false, a manual call to [PusTm::calc_own_crc16] or /// [PusTm::update_packet_fields] is necessary for the serialized or cached CRC16 to be valid. pub calc_crc_on_serialization: bool, #[cfg_attr(feature = "serde", serde(skip))] - raw_data: Option<&'src_data [u8]>, - source_data: Option<&'src_data [u8]>, + raw_data: Option<&'raw_data [u8]>, + source_data: Option<&'raw_data [u8]>, crc16: Option, } -impl<'src_data> PusTm<'src_data> { +impl<'raw_data> PusTm<'raw_data> { /// Generates a new struct instance. /// /// # Arguments @@ -231,8 +232,8 @@ impl<'src_data> PusTm<'src_data> { /// the correct value to this field manually pub fn new( sp_header: &mut SpHeader, - sec_header: PusTmSecondaryHeader<'src_data>, - source_data: Option<&'src_data [u8]>, + sec_header: PusTmSecondaryHeader<'raw_data>, + source_data: Option<&'raw_data [u8]>, set_ccsds_len: bool, ) -> Self { sp_header.set_packet_type(PacketType::Tm); @@ -262,11 +263,11 @@ impl<'src_data> PusTm<'src_data> { length } - pub fn timestamp(&self) -> Option<&'src_data [u8]> { + pub fn timestamp(&self) -> Option<&'raw_data [u8]> { self.sec_header.timestamp } - pub fn source_data(&self) -> Option<&'src_data [u8]> { + pub fn source_data(&self) -> Option<&'raw_data [u8]> { self.source_data } @@ -401,7 +402,7 @@ impl<'src_data> PusTm<'src_data> { /// the instance and the found byte length of the packet. The timestamp length needs to be /// known beforehand. pub fn from_bytes( - slice: &'src_data [u8], + slice: &'raw_data [u8], timestamp_len: usize, ) -> Result<(Self, usize), PusError> { let raw_data_len = slice.len(); @@ -441,6 +442,17 @@ impl<'src_data> PusTm<'src_data> { verify_crc16_from_raw(raw_data, pus_tm.crc16.expect("CRC16 invalid"))?; Ok((pus_tm, total_len)) } + + #[deprecated(since = "0.5.2", note = "use raw_bytes() instead")] + pub fn raw(&self) -> Option<&'raw_data [u8]> { + self.raw_bytes() + } + + /// If [Self] was constructed [Self::from_bytes], this function will return the slice it was + /// constructed from. Otherwise, [None] will be returned. + pub fn raw_bytes(&self) -> Option<&'raw_data [u8]> { + self.raw_data + } } impl PartialEq for PusTm<'_> {