Initial structure for new implementation of walking functions using the heterogeneous tree.
This commit is contained in:
parent
456da98bed
commit
3f49519bea
@ -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;
|
||||
|
37
src/renderer/tree_walking.rs
Normal file
37
src/renderer/tree_walking.rs
Normal file
@ -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…
x
Reference in New Issue
Block a user