use bytes::{Buf, BytesMut};
use derive_more::Debug;
pub use buf_list::BufList;
use crate::Error;
pub type Timestamp = moq_lite::Timescale<1_000_000>;
#[derive(Clone, Debug)]
pub struct Frame {
pub timestamp: Timestamp,
#[debug("{} bytes", payload.num_bytes())]
pub payload: BufList,
}
impl Frame {
pub fn encode(&self, group: &mut moq_lite::GroupProducer) -> Result<(), Error> {
let mut header = BytesMut::new();
self.timestamp.encode(&mut header).map_err(moq_lite::Error::from)?;
let size = header.len() + self.payload.remaining();
let mut chunked = group.create_frame(size.into())?;
chunked.write(header.freeze())?;
for chunk in &self.payload {
chunked.write(chunk.clone())?;
}
chunked.finish()?;
Ok(())
}
pub fn decode(mut buf: impl Buf) -> Result<Self, Error> {
let timestamp = Timestamp::decode(&mut buf)?;
let payload = buf.copy_to_bytes(buf.remaining());
Ok(Self {
timestamp,
payload: payload.into(),
})
}
}