From 566abdf892da1ee9dfcf0a0774622acfc9bb642e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com> Date: Sat, 25 Nov 2023 21:40:56 +0000 Subject: [PATCH] chore: improved quality of cheat codes Added more error handling. --- src/cheats/genie.rs | 14 +++++++------- src/cheats/shark.rs | 20 ++++++++++---------- src/rom.rs | 2 +- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/cheats/genie.rs b/src/cheats/genie.rs index 369b37e3..3501f770 100644 --- a/src/cheats/genie.rs +++ b/src/cheats/genie.rs @@ -41,18 +41,18 @@ impl GameGenie { self.codes.contains_key(&addr) } - pub fn get_addr(&self, addr: u16) -> &GameGenieCode { - self.codes.get(&addr).unwrap() + pub fn get_addr(&self, addr: u16) -> Result<&GameGenieCode, String> { + match self.codes.get(&addr) { + Some(code) => Ok(code), + None => Err(format!("Invalid address: {}", addr)), + } } pub fn add_code(&mut self, code: &str) -> Result<&GameGenieCode, String> { - let genie_code = match GameGenieCode::from_code(code, None) { - Ok(genie_code) => genie_code, - Err(message) => return Err(message), - }; + let genie_code = GameGenieCode::from_code(code, None)?; let addr = genie_code.addr; self.codes.insert(addr, genie_code); - Ok(self.get_addr(addr)) + self.get_addr(addr) } } diff --git a/src/cheats/shark.rs b/src/cheats/shark.rs index 565b3b81..5d19a2c7 100644 --- a/src/cheats/shark.rs +++ b/src/cheats/shark.rs @@ -48,18 +48,18 @@ impl GameShark { self.codes.clear(); } - pub fn get_addr(&self, addr: u16) -> &GameSharkCode { - self.codes.get(&addr).unwrap() + pub fn get_addr(&self, addr: u16) -> Result<&GameSharkCode, String> { + match self.codes.get(&addr) { + Some(code) => Ok(code), + None => Err(format!("Invalid address: {}", addr)), + } } pub fn add_code(&mut self, code: &str) -> Result<&GameSharkCode, String> { - let genie_code = match GameSharkCode::from_code(code, &self.rom_type) { - Ok(genie_code) => genie_code, - Err(message) => return Err(message), - }; - let addr = genie_code.addr; - self.codes.insert(addr, genie_code); - Ok(self.get_addr(addr)) + let shark_code = GameSharkCode::from_code(code, &self.rom_type)?; + let addr = shark_code.addr; + self.codes.insert(addr, shark_code); + self.get_addr(addr) } pub fn writes(&self) -> Vec<(u16, u16, u8)> { @@ -89,7 +89,7 @@ impl Default for GameShark { #[derive(Clone)] pub struct GameSharkCode { - /// The Game Genie code that is going to be applied to the ROM. + /// The GameShark code that is going to be applied to the ROM. code: String, /// The RAM bank that the cheat code is going to be applied to, diff --git a/src/rom.rs b/src/rom.rs index 1a53b4f2..c2120006 100644 --- a/src/rom.rs +++ b/src/rom.rs @@ -1023,7 +1023,7 @@ pub static GAME_GENIE: Mbc = Mbc { // retrieves the Game Genie code that matches the current address // keep in mind that this assumes that no more that one code is // registered for the same memory address - let genie_code = game_genie.get_addr(addr); + let genie_code = game_genie.get_addr(addr).unwrap(); // obtains the current byte that is stored at the address using // the MBC, this value will probably be patched -- GitLab