Going to try switching to boxed owned values to remove the template.

This commit is contained in:
Tom Alexander
2020-05-31 17:25:41 -04:00
parent 92dca74505
commit 2b532e7eb4
3 changed files with 52 additions and 58 deletions

View File

@@ -7,17 +7,17 @@ pub trait BreadcrumbTree {
fn get_parent(&self) -> Option<&dyn BreadcrumbTree>;
}
pub struct BreadcrumbTreeNode<'a, C: IntoContextElement> {
pub struct BreadcrumbTreeNode<'a> {
parent: Option<&'a dyn BreadcrumbTree>,
element: BreadcrumbTreeNodeElement<'a, C>,
element: BreadcrumbTreeNodeElement<'a>,
}
pub enum BreadcrumbTreeNodeElement<'a, C: IntoContextElement> {
Owned(C),
Borrowed(&'a C),
pub enum BreadcrumbTreeNodeElement<'a> {
Owned(Box<dyn IntoContextElement>),
Borrowed(&'a dyn IntoContextElement),
}
impl<'a, C: IntoContextElement> BreadcrumbTreeNode<'a, C> {
impl<'a> BreadcrumbTreeNode<'a> {
pub fn ice_iter(&'a self) -> impl Iterator<Item = &dyn IntoContextElement> {
self.breadcrumb_iter().map(|b| b.get_ice())
}
@@ -27,18 +27,16 @@ impl<'a, C: IntoContextElement> BreadcrumbTreeNode<'a, C> {
}
}
impl<'a, C: IntoContextElement> Borrow<dyn IntoContextElement + 'a>
for BreadcrumbTreeNodeElement<'a, C>
{
impl<'a> Borrow<dyn IntoContextElement + 'a> for BreadcrumbTreeNodeElement<'a> {
fn borrow(&self) -> &(dyn IntoContextElement + 'a) {
match self {
BreadcrumbTreeNodeElement::Owned(ice) => ice,
BreadcrumbTreeNodeElement::Owned(ice) => ice.as_ref(),
BreadcrumbTreeNodeElement::Borrowed(ice) => *ice,
}
}
}
impl<'a, C: IntoContextElement> BreadcrumbTree for BreadcrumbTreeNode<'a, C> {
impl<'a> BreadcrumbTree for BreadcrumbTreeNode<'a> {
fn get_ice(&self) -> &dyn IntoContextElement {
self.element.borrow()
}
@@ -48,7 +46,7 @@ impl<'a, C: IntoContextElement> BreadcrumbTree for BreadcrumbTreeNode<'a, C> {
}
}
impl<'a, C: IntoContextElement> IntoIterator for &'a BreadcrumbTreeNode<'a, C> {
impl<'a> IntoIterator for &'a BreadcrumbTreeNode<'a> {
type Item = &'a dyn BreadcrumbTree;
type IntoIter = BreadcrumbTreeIterator<'a>;