use bytes::{Buf, Bytes, BytesMut};
use derive_more::Debug;
use crate::Error;
pub type Timestamp = moq_lite::Timescale<1_000_000>;
#[derive(Clone, Debug)]
pub struct Frame {
pub timestamp: Timestamp,
#[debug("{} bytes", payload.len())]
pub payload: Bytes,
}
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.len();
let mut chunked = group.create_frame(size.into())?;
chunked.write(header.freeze())?;
chunked.write(self.payload.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 })
}
}