From 645b251f13640d9e3b04f6f1db368ff0469cd8b1 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sun, 31 May 2020 13:52:20 -0400 Subject: [PATCH] Initial setup for a heterogenous tree of IntoContextElement. --- src/renderer/breadcrumb_tree.rs | 39 +++++++++++++++++++++++++++++++++ src/renderer/mod.rs | 1 + 2 files changed, 40 insertions(+) create mode 100644 src/renderer/breadcrumb_tree.rs 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;