diff --git a/src/renderer/errors.rs b/src/renderer/errors.rs index 663065c..8af8bb1 100644 --- a/src/renderer/errors.rs +++ b/src/renderer/errors.rs @@ -14,6 +14,10 @@ pub enum RenderError<'a> { segment: String, elem: &'a dyn ContextElement, }, + NotFound { + path: &'a Vec<&'a str>, + breadcrumbs: Vec<&'a dyn ContextElement>, + }, /// Attempting to render and unrenderable type (for example, an object without any filters) CantRender { elem: &'a dyn ContextElement, @@ -36,6 +40,9 @@ impl fmt::Display for RenderError<'_> { write!(f, "Failed to walk to {} from {:?}", segment, elem) } RenderError::CantRender { elem } => write!(f, "Cant render {:?}", elem), + RenderError::NotFound { path, breadcrumbs } => { + write!(f, "Could not find {:?} in {:?}", path, breadcrumbs) + } } } } @@ -51,6 +58,9 @@ impl fmt::Debug for RenderError<'_> { write!(f, "Failed to walk to {} from {:?}", segment, elem) } RenderError::CantRender { elem } => write!(f, "Cant render {:?}", elem), + RenderError::NotFound { path, breadcrumbs } => { + write!(f, "Could not find {:?} in {:?}", path, breadcrumbs) + } } } } diff --git a/src/renderer/renderer.rs b/src/renderer/renderer.rs index 3f368d3..c0a2a64 100644 --- a/src/renderer/renderer.rs +++ b/src/renderer/renderer.rs @@ -212,6 +212,13 @@ fn new_walk_path<'a>( breadcrumbs: Vec<&'a dyn ContextElement>, path: &Vec<&str>, ) -> Result<&'a dyn ContextElement, RenderError<'a>> { + for context in breadcrumbs.iter().rev() { + match walk_path_from_single_level(*context, path)? { + WalkResult::NoWalk => {} + WalkResult::PartialWalk => {} + WalkResult::FullyWalked(_) => {} + } + } Err(RenderError::Generic("temp".to_owned())) }