1use bitvec::prelude::*;
2
3#[derive(Debug, Default, Clone)]
4pub struct UserData<'a> {
5 data: &'a BitSlice<u8>,
6}
7
8impl<'a> UserData<'a> {
9 pub fn new(data: &'a BitSlice<u8>) -> Self {
10 Self { data }
11 }
12
13 fn len(&self) -> usize {
14 self.data.len()
15 }
16 fn to_bits(&self, _aux: &mut (&mut usize, &'a mut BitSlice<u8>)) {
17 _aux.1[*_aux.0..*_aux.0 + self.len()].copy_from_bitslice(self.data);
18 *_aux.0 += self.len();
19 }
20}
21
22
23#[derive(Debug, Default)]
24pub struct DataField<'a> {
25 sec_header: Option<&'a SecondaryHeader<'a>>, user_data: Option<&'a UserData<'a>>, }
28
29impl<'a> DataField<'a> {
30 pub fn new() -> Self {
31 Self { sec_header: None, user_data: None, ..Default::default() }
32 }
33
34 pub fn len(&self) -> usize {
35 let ud_size = if let Some(s) = &self.user_data {
36 s.len()
37 } else {
38 0
39 };
40
41 let sh_size = if let Some(s) = &self.sec_header {
42 s.len()
43 } else {
44 0
45 };
46
47 sh_size + ud_size
48 }
49
50 pub fn user_data(&mut self, data: Option<&'a UserData>) {
51 self.user_data = data;
52 }
53
54 pub fn sec_header(&mut self, data: Option<&'a SecondaryHeader>) {
55 self.sec_header = data;
56 }
57
58 pub fn to_bits(&self, _aux: &mut (&mut usize, &'a mut BitSlice<u8>)) {
59 if let Some(sh) = self.sec_header {
60 sh.to_bits(_aux);
61 }
62 if let Some(ud) = self.user_data {
63 ud.to_bits(_aux);
64 }
65 }
66}
67
68#[derive(Debug, Default)]
70pub struct SecondaryHeader<'a> {
71 time_code: Option<&'a BitSlice<u8>>, ancillary: Option<&'a BitSlice<u8>>, }
74
75impl<'a> SecondaryHeader<'a> {
76 pub fn new(time_code: Option<&'a BitSlice<u8>>, ancillary: Option<&'a BitSlice<u8>>) -> Self {
77 Self { time_code, ancillary, ..Default::default() }
78 }
79 pub fn len(&self) -> usize {
80 let tc_size = if let Some(s) = &self.time_code {
81 s.len()
82 } else {
83 0
84 };
85
86 let anc_size = if let Some(s) = &self.ancillary {
87 s.len()
88 } else {
89 0
90 };
91
92 tc_size + anc_size
93 }
94
95 fn to_bits(&self, _aux: &mut (&mut usize, &'a mut BitSlice<u8>)) {
96 let tc = self.time_code.unwrap_or_default();
97 let ac = self.ancillary.unwrap_or_default();
98
99
100 _aux.1[*_aux.0..tc.len()].copy_from_bitslice(tc);
101 _aux.1[*_aux.0 + tc.len()..].copy_from_bitslice(ac);
102 *_aux.0 += self.len();
103 }
104}
105