From 6bcc66dff58204cd72bca474d442ab6af4f224be Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Mon, 4 May 2020 23:36:13 -0400 Subject: [PATCH] Adding NotFound error type. --- src/renderer/errors.rs | 10 ++++++++++ src/renderer/renderer.rs | 7 +++++++ 2 files changed, 17 insertions(+) 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())) }