From 43d663fda9e0a6c3f9e43f26fcc25b822d81f08e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com>
Date: Sun, 11 Aug 2024 12:20:31 +0100
Subject: [PATCH] chore: more abstract write operations

---
 crates/common/src/data.rs | 20 +++++++++++++++++++-
 src/timer.rs              | 22 +++++++++++-----------
 2 files changed, 30 insertions(+), 12 deletions(-)

diff --git a/crates/common/src/data.rs b/crates/common/src/data.rs
index d9af7690..bfbca4bc 100644
--- a/crates/common/src/data.rs
+++ b/crates/common/src/data.rs
@@ -1,10 +1,28 @@
 use std::{
-    io::{Cursor, Read},
+    io::{Cursor, Read, Write},
     mem::size_of,
 };
 
 use crate::error::Error;
 
+#[inline(always)]
+pub fn write_u8(data: &mut Cursor<Vec<u8>>, value: u8) -> Result<(), Error> {
+    data.write_all(&value.to_le_bytes())?;
+    Ok(())
+}
+
+#[inline(always)]
+pub fn write_u16(data: &mut Cursor<Vec<u8>>, value: u16) -> Result<(), Error> {
+    data.write_all(&value.to_le_bytes())?;
+    Ok(())
+}
+
+#[inline(always)]
+pub fn write_u32(data: &mut Cursor<Vec<u8>>, value: u32) -> Result<(), Error> {
+    data.write_all(&value.to_le_bytes())?;
+    Ok(())
+}
+
 #[inline(always)]
 pub fn read_u8(data: &mut Cursor<&[u8]>) -> Result<u8, Error> {
     let mut buffer = [0x00; size_of::<u8>()];
diff --git a/src/timer.rs b/src/timer.rs
index e902ea85..be393cd6 100644
--- a/src/timer.rs
+++ b/src/timer.rs
@@ -1,9 +1,9 @@
 //! Timer functions and structures.
 
-use std::io::{Cursor, Write};
+use std::io::Cursor;
 
 use boytacean_common::{
-    data::{read_u16, read_u8},
+    data::{read_u16, read_u8, write_u16, write_u8},
     error::Error,
 };
 
@@ -173,15 +173,15 @@ impl BusComponent for Timer {
 impl StateComponent for Timer {
     fn state(&self) -> Result<Vec<u8>, Error> {
         let mut cursor = Cursor::new(vec![]);
-        cursor.write(&self.div.to_le_bytes())?;
-        cursor.write(&self.tima.to_le_bytes())?;
-        cursor.write(&self.tma.to_le_bytes())?;
-        cursor.write(&self.tac.to_le_bytes())?;
-        cursor.write(&self.div_clock.to_le_bytes())?;
-        cursor.write(&self.tima_clock.to_le_bytes())?;
-        cursor.write(&(self.tima_enabled as u8).to_le_bytes())?;
-        cursor.write(&self.tima_ratio.to_le_bytes())?;
-        cursor.write(&(self.int_tima as u8).to_le_bytes())?;
+        write_u8(&mut cursor, self.div)?;
+        write_u8(&mut cursor, self.tima)?;
+        write_u8(&mut cursor, self.tma)?;
+        write_u8(&mut cursor, self.tac)?;
+        write_u16(&mut cursor, self.div_clock)?;
+        write_u16(&mut cursor, self.tima_clock)?;
+        write_u8(&mut cursor, self.tima_enabled as u8)?;
+        write_u16(&mut cursor, self.tima_ratio)?;
+        write_u8(&mut cursor, self.int_tima as u8)?;
         Ok(cursor.into_inner())
     }
 
-- 
GitLab