From: Ian Jackson Date: Wed, 11 May 2022 22:08:25 +0000 (+0100) Subject: shapelib: Introduce and use LLE::InGroup X-Git-Tag: otter-1.1.0~236 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=c4cf77678178bff3d72e75a58e8a7bd51b0c8a17;p=otter.git shapelib: Introduce and use LLE::InGroup Otherwise bundle errors are really quite inscrutable. Signed-off-by: Ian Jackson --- diff --git a/src/shapelib.rs b/src/shapelib.rs index a1317daf..ea31e6fe 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -136,6 +136,9 @@ pub enum LibraryLoadError { #[error("bad item name (invalid characters) in {0:?}")] BadItemName(String), #[error("{0:?}")] MaterialsFormatVersionError(#[from] MFVE), + #[error("group {group}: {error}")] + InGroup { group: String, error: Box }, + #[error("library {lib}: {error}")] InLibrary { lib: String, error: Box }, } @@ -887,6 +890,8 @@ pub fn load_catalogue(libname: &str, src: &mut dyn LibrarySource) .get("group").unwrap_or(&empty_table) .as_table().ok_or_else(|| LLE::ExpectedTable(format!("group")))?; for (groupname, gdefn) in groups { + (||{ + let gdefn = resolve_inherit(INHERIT_DEPTH_LIMIT, groups, groupname, gdefn)?; let gdefn: GroupDefn = TV::Table(gdefn.into_owned()).try_into()?; @@ -1032,12 +1037,19 @@ pub fn load_catalogue(libname: &str, src: &mut dyn LibrarySource) } } + + Ok(()) + })().map_err(|error| LLE::InGroup { + group: groupname.to_string(), + error: Box::new(error), + })? } Ok(l) - })().map_err( - |error| LLE::InLibrary { lib: libname.into(), error: Box::new(error) } - )? + })().map_err(|error| LLE::InLibrary { + lib: libname.into(), + error: Box::new(error), + })? } //---------- reading, support functions ----------