Initial structure for new implementation of walking functions using the heterogeneous tree.

master
Tom Alexander 4 years ago
parent 456da98bed
commit 3f49519bea
Signed by: talexander
GPG Key ID: D3A179C9A53C0EDE

@ -7,7 +7,7 @@ pub trait BreadcrumbTree {
fn get_parent(&self) -> Option<&dyn BreadcrumbTree>;
}
struct BreadcrumbTreeNode<'a, C: IntoContextElement> {
pub struct BreadcrumbTreeNode<'a, C: IntoContextElement> {
parent: Option<&'a dyn BreadcrumbTree>,
element: BreadcrumbTreeNodeElement<'a, C>,
}
@ -44,7 +44,7 @@ impl<'a, C: IntoContextElement> BreadcrumbTree for BreadcrumbTreeNode<'a, C> {
}
}
struct BreadcrumbTreeIterator<'a>(Option<&'a dyn BreadcrumbTree>);
pub struct BreadcrumbTreeIterator<'a>(Option<&'a dyn BreadcrumbTree>);
impl<'a> Iterator for BreadcrumbTreeIterator<'a> {
type Item = &'a dyn IntoContextElement;

@ -7,6 +7,7 @@ mod inline_partial_tree;
mod iteration_context;
mod parameters_context;
mod renderer;
mod tree_walking;
mod walking;
pub use context_element::CloneIntoBoxedContextElement;

@ -0,0 +1,37 @@
use crate::renderer::breadcrumb_tree::BreadcrumbTree;
use crate::renderer::breadcrumb_tree::BreadcrumbTreeNode;
use crate::renderer::context_element::IntoContextElement;
use crate::renderer::WalkError;
use std::borrow::Borrow;
enum WalkResult<'a> {
NoWalk,
PartialWalk,
FullyWalked(&'a dyn IntoContextElement),
}
fn walk_path_from_single_level<'a, P, C>(context: &'a C, path: &[P]) -> WalkResult<'a>
where
P: Borrow<str>,
C: Borrow<dyn IntoContextElement + 'a>,
{
todo!()
}
pub fn walk_path<'a, B, P>(
maybe_breadcrumbs: Option<&'a BreadcrumbTreeNode<B>>,
path: &Vec<P>,
) -> Result<&'a dyn IntoContextElement, WalkError>
where
B: IntoContextElement,
P: Borrow<str>,
{
match (maybe_breadcrumbs, path.first()) {
(None, _) => return Err(WalkError::CantWalk),
(Some(breadcrumbs), None) => return Ok(breadcrumbs.get_ice()),
(Some(breadcrumbs), Some(path_first)) if path_first.borrow() == "." => (),
(Some(breadcrumbs), Some(path_first)) => (),
}
Err(WalkError::CantWalk)
}
Loading…
Cancel
Save