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 self.header.pack_into(s)?;
25 s.try_push(':')?;
26
27 if self.position.is_some() {
29 self.position.as_ref().unwrap().pack_into(s)?;
30 }
31
32 if self.wx.is_some() {
34 self.wx.as_ref().unwrap().pack_into(s)?;
35 }
36
37 if self.message.is_some() {
39 s.try_push_str(self.message.as_ref().unwrap())?;
40 }
41
42 Ok(())
43 }
44}