aprs_encode/aprs/
mod.rs

1use crate::{stack_str::PackArrayString, AprsHeader};
2
3use self::{position::AprsPosition, wx::AprsWx};
4
5pub mod header;
6pub mod position;
7pub mod wx;
8
9pub struct AprsPacket<'a> {
10    pub header: AprsHeader<'a>,
11    pub position: Option<AprsPosition>,
12    pub wx: Option<AprsWx>,
13    pub message: Option<&'a str>,
14}
15
16impl AprsPacket<'_> {}
17
18impl PackArrayString for AprsPacket<'_> {
19    fn pack_into<const SIZE: usize>(
20        &self,
21        s: &mut arrayvec::ArrayString<SIZE>,
22    ) -> Result<(), crate::errors::PackError> {
23        // Pack the header
24        self.header.pack_into(s)?;
25        s.try_push(':')?;
26
27        // Pack the position
28        if self.position.is_some() {
29            self.position.as_ref().unwrap().pack_into(s)?;
30        }
31
32        // Pack WX data
33        if self.wx.is_some() {
34            self.wx.as_ref().unwrap().pack_into(s)?;
35        }
36
37        // Pack the message
38        if self.message.is_some() {
39            s.try_push_str(self.message.as_ref().unwrap())?;
40        }
41
42        Ok(())
43    }
44}