From dc2a69925f8db6c26c525e8d96f59c7f5939a688 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com>
Date: Sat, 5 Aug 2023 12:56:30 +0100
Subject: [PATCH] chore: more serialization structure

---
 src/state.rs | 54 +++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 51 insertions(+), 3 deletions(-)

diff --git a/src/state.rs b/src/state.rs
index 19609f50..bc6504b1 100644
--- a/src/state.rs
+++ b/src/state.rs
@@ -1,5 +1,12 @@
 #[repr(packed)]
-pub struct BeesBlock {
+pub struct BeesState {
+    pub name: BeesName,
+    pub info: BeesInfo,
+    pub core: BeesCore,
+}
+
+#[repr(packed)]
+pub struct BeesBlockHeader {
     pub magic: u32,
     pub size: u32,
 }
@@ -16,9 +23,22 @@ pub struct BeesFooter {
     pub magic: u32,
 }
 
+#[repr(packed)]
+pub struct BeesName {
+    pub header: BeesBlockHeader,
+    pub name: String,
+}
+
+#[repr(packed)]
+pub struct BeesInfo {
+    pub header: BeesBlockHeader,
+    pub title: [u8; 16],
+    pub checksum: [u8; 2],
+}
+
 #[repr(packed)]
 pub struct BeesCore {
-    pub header: BeesBlock,
+    pub header: BeesBlockHeader,
 
     pub major: u16,
     pub minor: u16,
@@ -38,7 +58,7 @@ pub struct BeesCore {
     pub execution_mode: u8,
     _padding: u8,
 
-    pub io_registers: [u8; 0x80],
+    pub io_registers: [u8; 128],
 
     pub ram: BeesBuffer,
     pub vram: BeesBuffer,
@@ -48,3 +68,31 @@ pub struct BeesCore {
     pub background_palettes: BeesBuffer,
     pub object_palettes: BeesBuffer,
 }
+
+trait Serialize {
+    fn store(&self, buffer: &mut Vec<u8>);
+    fn load(&self, data: &[u8]);
+}
+
+impl Serialize for BeesState {
+    fn store(&self, buffer: &mut Vec<u8>) {
+        self.info.store(buffer);
+    }
+
+    fn load(&self, data: &[u8]) {
+        todo!()
+    }
+}
+
+impl Serialize for BeesName {
+    fn store(&self, buffer: &mut Vec<u8>) {
+    }
+
+    fn load(&self, data: &[u8]) {}
+}
+
+impl Serialize for BeesInfo {
+    fn store(&self, buffer: &mut Vec<u8>) {}
+
+    fn load(&self, data: &[u8]) {}
+}
-- 
GitLab