}
}
+impl<'a> PieceLoadArgs<'a> {
+ #[throws(SpE)]
+ pub fn recursing(mut self) -> Self {
+ self.depth = self.depth.increment()
+ .ok_or_else(|| SpE::ImageOrAliasLoop)?;
+ self
+ }
+}
+
#[derive(Error, Debug)]
#[error("{self:?}")]
pub struct PieceTraitDowncastFailed<'p> {
#[throws(SpecError)]
fn new_depth(&self, depth: SpecDepth) -> SpecDepth {
- depth.increment().ok_or_else(||{
- SpE::AliasLoop(self.target.clone())
- })?
+ depth.increment().ok_or_else(|| SpE::ImageOrAliasLoop)?
}
}
self.resolve(pcaliases)?.count(&default())?
}
#[throws(SpecError)]
- fn load(&self, PLA { i,gpc,ig,depth,.. }: PLA) -> SpecLoaded {
- let r = self.resolve(&ig.pcaliases)?
- .load(PLA { i, gpc, ig, depth: self.new_depth(depth)? })?;
+ fn load(&self, pla: PLA) -> SpecLoaded {
+ let r = self.resolve(&pla.ig.pcaliases)?
+ .load(pla.recursing()?)?;
r
}
#[throws(SpecError)]
self.find_load_general(
pla.ig, pla.depth,
|loaded| Ok(loaded.into()),
- |magic| magic.load(pla),
+ |magic| magic.load(pla.recursing()?)
)?
}
#[throws(SpecError)]
#[error("piece alias not found")] AliasNotFound,
#[error("piece alias target is multi spec")] AliasTargetMultiSpec,
#[error("invalid range ({0} to {1})")] InvalidRange(usize,usize),
- #[error("piece alias loop")] AliasLoop(String),
+ #[error("piece image/alias depth exceeded")] ImageOrAliasLoop,
#[error("invalid size scale")] InvalidSizeScale,
#[error("multiple faces required")] MultipleFacesRequired,
#[error("far too many faces ({0})")] FarTooManyFaces(usize),