From 05cefcdf32b2d3dc9a2cf3f9b391bfda785bd801 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 25 Oct 2019 06:34:48 -0400 Subject: break it up into files --- src/frame.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/frame.rs (limited to 'src/frame.rs') diff --git a/src/frame.rs b/src/frame.rs new file mode 100644 index 0000000..f4e8099 --- /dev/null +++ b/src/frame.rs @@ -0,0 +1,28 @@ +pub struct Frame { + pub time: std::time::Duration, + pub data: Vec, +} + +impl std::convert::TryFrom for Vec { + type Error = crate::error::Error; + + fn try_from(frame: Frame) -> crate::error::Result { + 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) + } +} -- cgit v1.2.3-54-g00ecf