From de7f5c5a338166904a9510fa379e2f549715a66e Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 25 Mar 2021 19:04:03 +0000 Subject: [PATCH] piece aliases: tolerate missing alias for shapelib backs We might be running in an environment where the alias is not defined. Eg, otterlib. This is a bit nasty really, since it means that broken game specs, where some of the cards are busted, don't get spotted. Signed-off-by: Ian Jackson --- src/shapelib.rs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/shapelib.rs b/src/shapelib.rs index 1bdcc978..f5ad04d7 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -390,19 +390,26 @@ impl Contents { face.xform.scale[0] *= -1.; faces.push(face); } else if let Some(back_spec) = &idata.group.d.back { - let p = back_spec.load_occult(pcaliases)?; - let p = p.into(); - back = Some(p); + match back_spec.load_occult(pcaliases) { + Err(SpecError::AliasNotFound) => { }, + Err(e) => throw!(e), + Ok(p) => { + let p = p.into(); + back = Some(p); + } + } } faces.shrink_to_fit(); let occultable = match &idata.occ { OccData::None => None, OccData::Back(ilk) => { - let back = if let Some(back) = &back { back } - else { throw!(internal_error_bydebug(&self)) }; - let back = back.clone(); - Some((ilk.clone(), back)) + if let Some(back) = &back { + let back = back.clone(); + Some((ilk.clone(), back)) + } else { + None // We got AliasNotFound, ah well + } }, OccData::Internal(occ) => { let name = occ.item_name.clone(); -- 2.30.2