blob: f4e80994bea402da2ce8daf114bc656f97db21ae (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
pub struct Frame {
pub time: std::time::Duration,
pub data: Vec<u8>,
}
impl std::convert::TryFrom<Frame> for Vec<u8> {
type Error = crate::error::Error;
fn try_from(frame: Frame) -> crate::error::Result<Self> {
let secs = u32::try_from(frame.time.as_secs()).map_err(|_| {
crate::error::Error::FrameTooLong {
input: frame.time.as_secs(),
}
})?;
let micros = frame.time.subsec_micros();
let len = u32::try_from(frame.data.len()).map_err(|_| {
crate::error::Error::FrameTooBig {
input: frame.data.len(),
}
})?;
let mut bytes = vec![];
bytes.extend(secs.to_le_bytes().iter());
bytes.extend(micros.to_le_bytes().iter());
bytes.extend(len.to_le_bytes().iter());
bytes.extend(frame.data.iter());
Ok(bytes)
}
}
|