From 4d7d1006b0daec59ea94b4ebfa7a5ebf1c316f31 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sun, 27 Oct 2019 06:35:23 -0400 Subject: creator should just return the frame can convert the frame to bytes separately --- src/creator.rs | 31 ++++++++++++++++--------------- src/writer.rs | 3 ++- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/creator.rs b/src/creator.rs index 3966470..666ffc7 100644 --- a/src/creator.rs +++ b/src/creator.rs @@ -1,5 +1,3 @@ -use std::convert::TryFrom as _; - #[derive(Debug, Clone)] pub struct Creator { base_time: Option, @@ -14,17 +12,17 @@ impl Creator { &mut self, cur_time: std::time::Instant, data: &[u8], - ) -> crate::error::Result> { + ) -> crate::frame::Frame { let base_time = if let Some(base_time) = &self.base_time { base_time } else { self.base_time = Some(cur_time); self.base_time.as_ref().unwrap() }; - Vec::::try_from(crate::frame::Frame { + crate::frame::Frame { time: cur_time - *base_time, data: data.to_vec(), - }) + } } } @@ -42,17 +40,20 @@ mod test { fn test_basic() { let mut creator = Creator::new(); let base_time = std::time::Instant::now(); + + let zero_frame: Vec = + std::convert::TryFrom::try_from(creator.frame(base_time, b"")) + .unwrap(); + assert_eq!(zero_frame, vec![0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]); + + let data_frame: Vec = + std::convert::TryFrom::try_from(creator.frame( + base_time + std::time::Duration::new(38, 123_456_000), + b"\x1b[2Jfoobar", + )) + .unwrap(); assert_eq!( - creator.frame(base_time, b"").unwrap(), - vec![0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - ); - assert_eq!( - creator - .frame( - base_time + std::time::Duration::new(38, 123_456_000), - b"\x1b[2Jfoobar" - ) - .unwrap(), + data_frame, vec![ 38, 0, 0, 0, 64, 226, 1, 0, 10, 0, 0, 0, 27, 91, 50, 74, 102, 111, 111, 98, 97, 114, diff --git a/src/writer.rs b/src/writer.rs index 1717032..680da3d 100644 --- a/src/writer.rs +++ b/src/writer.rs @@ -20,7 +20,8 @@ impl Writer { time: std::time::Instant, data: &[u8], ) -> crate::error::Result<()> { - let bytes = self.creator.frame(time, data)?; + let frame = self.creator.frame(time, data); + let bytes: Vec = std::convert::TryFrom::try_from(frame)?; self.to_write.extend(bytes.iter()); Ok(()) } -- cgit v1.2.3-54-g00ecf