diff --git a/src/renderer/breadcrumb_tree.rs b/src/renderer/breadcrumb_tree.rs new file mode 100644 index 0000000..2402c2f --- /dev/null +++ b/src/renderer/breadcrumb_tree.rs @@ -0,0 +1,39 @@ +use crate::renderer::context_element::IntoContextElement; +use std::borrow::Borrow; + +pub trait BreadcrumbTree { + fn get_ice(&self) -> &dyn IntoContextElement; + + fn get_parent(&self) -> Option<&dyn BreadcrumbTree>; +} + +struct BreadcrumbTreeNode<'a, C: IntoContextElement> { + parent: Option<&'a dyn BreadcrumbTree>, + element: BreadcrumbTreeNodeElement<'a, C>, +} + +enum BreadcrumbTreeNodeElement<'a, C: IntoContextElement> { + Owned(C), + Borrowed(&'a C), +} + +impl<'a, C: IntoContextElement> Borrow + for BreadcrumbTreeNodeElement<'a, C> +{ + fn borrow(&self) -> &(dyn IntoContextElement + 'a) { + match self { + BreadcrumbTreeNodeElement::Owned(ice) => ice, + BreadcrumbTreeNodeElement::Borrowed(ice) => *ice, + } + } +} + +impl<'a, C: IntoContextElement> BreadcrumbTree for BreadcrumbTreeNode<'a, C> { + fn get_ice(&self) -> &dyn IntoContextElement { + self.element.borrow() + } + + fn get_parent(&self) -> Option<&dyn BreadcrumbTree> { + self.parent + } +} diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs index dfbbbe6..3439bc5 100644 --- a/src/renderer/mod.rs +++ b/src/renderer/mod.rs @@ -1,5 +1,6 @@ //! This module contains a renderer for a rust implementation of LinkedIn Dust +mod breadcrumb_tree; mod context_element; mod errors; mod inline_partial_tree;