use bit_vec::BitVec;
#[derive(Debug)]
pub struct DataField {
sec_header: Option<SecondaryHeader>, user_data: Option<BitVec>, }
impl DataField {
pub fn new() -> Self {
Self { sec_header: None, user_data: None }
}
pub fn len(&self) -> usize {
self.sec_header.as_ref().unwrap_or(&SecondaryHeader::new(None, None)).len() + self.user_data.as_ref().unwrap_or(&BitVec::new()).len()
}
pub fn user_data(&mut self, data: &Option<BitVec>) {
self.user_data = data.clone();
}
pub fn sec_header(&mut self, data: &Option<SecondaryHeader>) {
self.sec_header = data.clone()
}
pub fn to_bits(&self) -> BitVec {
let mut bits = BitVec::new();
if let Some(head) = &self.sec_header {
bits.extend(head.to_bits());
}
if let Some(data) = &self.user_data {
bits.extend(data);
}
bits
}
}
#[derive(Clone, Debug)]
pub struct SecondaryHeader {
time_code: Option<BitVec>, ancillary: Option<BitVec>, }
impl SecondaryHeader {
pub fn new(time_code: Option<BitVec>, ancillary: Option<BitVec>) -> Self {
Self { time_code, ancillary }
}
pub fn len(&self) -> usize {
self.time_code.as_ref().unwrap_or(&BitVec::new()).len() + self.ancillary.as_ref().unwrap_or(&BitVec::new()).len()
}
fn to_bits(&self) -> BitVec {
let mut comp = BitVec::new();
if let Some(time_code) = &self.time_code {
comp.extend(time_code);
}
if let Some(ancillary) = &self.ancillary {
comp.extend(ancillary);
}
comp
}
}