From 2e92202dbb8d626591348d2570ca2081dae38852 Mon Sep 17 00:00:00 2001 From: Arthur Roberts Date: Sun, 18 Jun 2023 22:39:28 +0100 Subject: [PATCH] Added this wad.rs thingy It'll hopefully let me get into more rust AND doom stuff --- Cargo.toml | 1 + src/infos.rs | 10 +++++----- src/main.rs | 1 + src/wad.rs | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 src/wad.rs diff --git a/Cargo.toml b/Cargo.toml index 35923ab..fcfd4aa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +bincode = "1.3.3" directories = "5.0.1" eframe = "0.21.3" native-dialog = "0.6.3" diff --git a/src/infos.rs b/src/infos.rs index 2f29612..f371214 100644 --- a/src/infos.rs +++ b/src/infos.rs @@ -34,26 +34,26 @@ impl CommandManager { } pub fn remove_iwad(&mut self) { self.iwad = None; - self.generate_command_str(); + let _ = self.generate_command_str(); } pub fn add_iwad(&mut self, iwad: &WadInfo) { self.iwad = Some(iwad.path.clone()); - self.generate_command_str(); + let _ = self.generate_command_str(); } pub fn add_pwads(&mut self, pwads: &Vec<&WadInfo>) { self.pwads = Vec::new(); for pwad in pwads { self.pwads.push(pwad.path.clone()); - self.generate_command_str(); } + let _ = self.generate_command_str(); } pub fn add_launcher(&mut self, launcher: &LauncherInfo) { self.launcher = Some(launcher.path.clone()); - self.generate_command_str(); + let _ = self.generate_command_str(); } pub fn remove_launcher(&mut self) { self.launcher = None; - self.generate_command_str(); + let _ = self.generate_command_str(); } pub fn generate_command(&self) -> Result<(String, Vec), CommandErrors> { let launcher = if let Some(launcher) = &self.launcher { diff --git a/src/main.rs b/src/main.rs index 46a3186..a07ab1b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,7 @@ use std::process::Command; pub mod config; pub mod infos; +pub mod wad; fn main() -> Result<(), eframe::Error> { let gui_options = eframe::NativeOptions { diff --git a/src/wad.rs b/src/wad.rs new file mode 100644 index 0000000..a96b8c2 --- /dev/null +++ b/src/wad.rs @@ -0,0 +1,32 @@ +use std::path::PathBuf; +use std::fs::File; +use std::io::BufReader; +use bincode; +use serde::Deserialize; + +#[derive(Deserialize, Debug)] +pub struct WadHeader { + pub identifier: [u8; 4], + pub num_lumps: i32, + pub file_offset_to_start: i32, +} + +pub fn open_wad(path: &PathBuf) -> WadHeader { + let mut file = BufReader::new(File::open(path).unwrap()); + let header: WadHeader = bincode::deserialize_from(&mut file).unwrap(); + + + header +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_open_wad() { + let freedoom_iwad = PathBuf::from("freedoom1.wad"); + let ow = open_wad(&freedoom_iwad); + assert_eq!(std::str::from_utf8(&ow.identifier).unwrap(), "IWAD"); + } +}