diff --git a/Cargo.lock b/Cargo.lock index e9bc3e8..f385584 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -405,6 +405,7 @@ dependencies = [ "binrw", "chrono", "substring", + "thiserror", "urlencoding", ] @@ -697,6 +698,26 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "thiserror" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.27", +] + [[package]] name = "time" version = "0.1.45" diff --git a/crates/save/Cargo.toml b/crates/save/Cargo.toml index 8a6d25c..70c79db 100644 --- a/crates/save/Cargo.toml +++ b/crates/save/Cargo.toml @@ -10,6 +10,7 @@ crate-type = ["cdylib", "rlib"] [dependencies] +thiserror = "1.0" binrw = "0.11" chrono = "0.4" urlencoding = "2.1" diff --git a/crates/save/src/lib.rs b/crates/save/src/lib.rs index 05b327a..6af187c 100644 --- a/crates/save/src/lib.rs +++ b/crates/save/src/lib.rs @@ -33,6 +33,19 @@ pub const LEVEL_NAMES: [&str; 12] = [ ]; +pub type Result = std::result::Result; + + +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error("Failed to deserialize savefile")] + DeserializationFailed(binrw::Error), + + #[error("Failed to serialize savefile")] + SerializationFailed(binrw::Error), +} + + #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum RobeColor { Red, @@ -111,19 +124,18 @@ pub struct Savefile { } impl Savefile { - pub fn from_reader(mut reader: R) -> binrw::BinResult + pub fn from_reader(mut reader: R) -> Result where R: Read + BinReaderExt, { - // TODO: implement error type - Ok(reader.read_le()?) + Ok(reader.read_le().map_err(Error::DeserializationFailed)?) } - pub fn write(&self, mut writer: W) -> binrw::BinResult<()> + pub fn write(&self, mut writer: W) -> Result<()> where W: Write + BinWriterExt, { - writer.write_le(self)?; + writer.write_le(self).map_err(Error::SerializationFailed)?; Ok(()) }