From 7f5798c31912ba62a1f5e9ddcbabe71af74c502f Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 4 May 2021 20:36:05 +0100 Subject: [PATCH] zipfile: Better reporting of missing members Signed-off-by: Ian Jackson --- src/bundles.rs | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/bundles.rs b/src/bundles.rs index 7a8eb0a9..b6ca2e1f 100644 --- a/src/bundles.rs +++ b/src/bundles.rs @@ -189,13 +189,27 @@ where S: Display + Debug index, suffix) } +#[derive(Error,Debug)] +pub enum LoadError { + BadBundle(BadBundle), + IE(#[from] IE), +} +display_as_debug!{LoadError} +use LoadError as LE; + +impl From for LoadError { + fn from(ze: ZipError) -> LoadError { + LE::BadBundle(format!("bad zipfile: {}", ze)) + } +} + #[ext(pub)] impl ZipArchive where R: Read + io::Seek { - fn by_name_caseless<'a>(&'a mut self, name: &str) - -> Result, ZipError> + #[throws(LoadError)] + fn by_name_caseless<'a>(&'a mut self, name: &str) -> ZipFile<'a> { fn search<'a,R>(za: &'a mut ZipArchive, name: &str) - -> Result + -> Result where R: Read + io::Seek { for i in 0..za.len() { @@ -204,10 +218,10 @@ impl ZipArchive where R: Read + io::Seek { let m = m?; if m.name_raw().eq_ignore_ascii_case(name.as_bytes()) { return Ok(i) } } - return Err(ZipError::FileNotFound); + return Err(LE::BadBundle(format!("bundle missing {}", name))); } let i = search(self, name)?; - self.by_index(i) + self.by_index(i)? } } @@ -282,20 +296,6 @@ pub struct Uploading { #[throws(IE)] fn load_bundle(ib: &mut InstanceBundles, ig: &mut Instance, id: Id, path: &str) { - #[derive(Error,Debug)] - enum LoadError { - BadBundle(BadBundle), - IE(#[from] IE), - } - display_as_debug!{LoadError} - use LoadError as LE; - - impl From for LoadError { - fn from(ze: ZipError) -> LoadError { - LE::BadBundle(format!("bad zipfile: {}", ze)) - } - } - let iu: usize = id.index.into(); match ib.bundles.get(iu) { -- 2.30.2