From 8db873c425132c4cf9acf2043b9fa37fe6caf9e3 Mon Sep 17 00:00:00 2001 From: Wim Pomp Date: Sun, 4 Jan 2026 15:09:23 +0100 Subject: [PATCH] - bump ome-metadata dependency - make Reader::new error instead of panic if file cannot be read --- Cargo.toml | 4 ++-- src/reader.rs | 31 +++++++++++++++++++++---------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 39f10b2..184d9c0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ndbioimage" -version = "2026.1.0" +version = "2026.1.1" edition = "2024" rust-version = "1.85.1" authors = ["Wim Pomp "] @@ -36,7 +36,7 @@ serde_json = { version = "1", optional = true } serde_with = "3" tiffwrite = { version = "2025.12.0", optional = true} thread_local = "1" -ome-metadata = "0.3" +ome-metadata = "0.3.2" lazy_static = "1" thiserror = "2" diff --git a/src/reader.rs b/src/reader.rs index 1bc8539..f115bab 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -269,15 +269,7 @@ impl Deref for Reader { type Target = ImageReader; fn deref(&self) -> &Self::Target { - self.image_reader.get_or(|| { - let reader = ImageReader::new().unwrap(); - let meta_data_tools = MetadataTools::new().unwrap(); - let ome_meta = meta_data_tools.create_ome_xml_metadata().unwrap(); - reader.set_metadata_store(ome_meta).unwrap(); - reader.set_id(self.path.to_str().unwrap()).unwrap(); - reader.set_series(self.series as i32).unwrap(); - reader - }) + self.get_reader().unwrap() } } @@ -322,6 +314,7 @@ impl Reader { pixel_type: PixelType::I8, little_endian: false, }; + reader.set_reader()?; reader.size_x = reader.get_size_x()? as usize; reader.size_y = reader.get_size_y()? as usize; reader.size_c = reader.get_size_c()? as usize; @@ -332,6 +325,22 @@ impl Reader { Ok(reader) } + fn get_reader(&self) -> Result<&ImageReader, Error> { + self.image_reader.get_or_try(|| { + let reader = ImageReader::new()?; + let meta_data_tools = MetadataTools::new()?; + let ome_meta = meta_data_tools.create_ome_xml_metadata()?; + reader.set_metadata_store(ome_meta)?; + reader.set_id(self.path.to_str().ok_or(Error::InvalidFileName)?)?; + reader.set_series(self.series as i32)?; + Ok(reader) + }) + } + + pub fn set_reader(&self) -> Result<(), Error> { + self.get_reader().map(|_| ()) + } + /// Get ome metadata as ome structure pub fn get_ome(&self) -> Result { let mut ome = self.ome_xml()?.parse::()?; @@ -473,6 +482,8 @@ impl Reader { impl Drop for Reader { fn drop(&mut self) { - let _ = self.close(); + if let Ok(reader) = self.get_reader() { + reader.close().unwrap(); + } } }