dltree 0.1.5

Doubly linked tree with leaf-considering typing
Documentation
use super::tree_element_impl::TreeElementImpl;
use crate::internal::TreeElementTrait;
use std::cell::RefCell;
use std::rc::Weak;

#[derive(Debug)]
pub struct NodeImpl<IT, LT> {
    pub parent: Option<Weak<RefCell<NodeImpl<IT, LT>>>>,
    pub value: IT,
    pub children: Vec<TreeElementImpl<IT, LT>>,
}

impl<IT, LT> NodeImpl<IT, LT> {
    pub fn new(value: IT, parent: Option<Weak<RefCell<NodeImpl<IT, LT>>>>) -> Self {
        NodeImpl {
            parent,
            value,
            children: vec![],
        }
    }
}

impl<IT, LT> TreeElementTrait<IT, LT> for NodeImpl<IT, LT> {
    fn parent(&mut self) -> &mut Option<Weak<RefCell<NodeImpl<IT, LT>>>> {
        &mut self.parent
    }
}