From 313c8295e5d1ea01c6d4efb8584da727e37e97ef Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 25 Aug 2025 11:30:56 +0300 Subject: [PATCH] Use thiserror --- Cargo.lock | 21 +++++++++++++++++++++ Cargo.toml | 3 ++- src/lib.rs | 25 +++++++------------------ 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d592cb6..24f8554 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -320,6 +320,7 @@ dependencies = [ "half", "memmap2", "tempfile", + "thiserror", ] [[package]] @@ -534,6 +535,26 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "thiserror" +version = "2.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tinytemplate" version = "1.2.1" diff --git a/Cargo.toml b/Cargo.toml index 6a66fb9..f143e64 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,6 +15,7 @@ readme = "README.md" [dependencies] bytemuck = { version = "1.15", default-features = false, features = ["derive"] } memmap2 = { version = "0.9", optional = true } +thiserror = { version = "2.0.16", default-features = false } [dev-dependencies] criterion = { version = "0.5", features = ["html_reports"] } @@ -49,5 +50,5 @@ harness = false default = ["std", "mmap", "file"] mmap = ["std", "dep:memmap2"] file = ["std"] -std = [] +std = ["thiserror/std"] f16 = [] diff --git a/src/lib.rs b/src/lib.rs index d0040bf..018a95b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -30,30 +30,19 @@ pub use mrcfile::{MrcFile, open_file}; // Error type -#[derive(Debug)] +#[derive(thiserror::Error, Debug)] pub enum Error { + #[error("IO error")] Io, + #[error("Invalid MRC header")] InvalidHeader, + #[error("Invalid MRC mode")] InvalidMode, + #[error("Invalid dimensions")] InvalidDimensions, + #[error("Type mismatch")] TypeMismatch, #[cfg(feature = "mmap")] + #[error("Memory mapping error")] Mmap, } - -impl core::fmt::Display for Error { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - match self { - Error::Io => write!(f, "IO error"), - Error::InvalidHeader => write!(f, "Invalid MRC header"), - Error::InvalidMode => write!(f, "Invalid MRC mode"), - Error::InvalidDimensions => write!(f, "Invalid dimensions"), - Error::TypeMismatch => write!(f, "Type mismatch"), - #[cfg(feature = "mmap")] - Error::Mmap => write!(f, "Memory mapping error"), - } - } -} - -#[cfg(feature = "std")] -impl core::error::Error for Error {}