bernardo-tui 0.2.7

A keyboard-only, distraction-free TUI widget library
Documentation
use crate::primitives::tree::tree_node::TreeNode;
use std::borrow::Cow;
use std::rc::Rc;

#[derive(Hash, Debug, PartialEq, Eq, Clone)]
pub struct StupidTree {
    id: usize,
    children: Vec<Rc<StupidTree>>,
}

impl StupidTree {
    pub fn new(id: usize, children: Vec<StupidTree>) -> Self {
        StupidTree {
            id,
            children: children.into_iter().map(|c| Rc::new(c)).collect(),
        }
    }
}

impl TreeNode<usize> for Rc<StupidTree> {
    fn id(&self) -> &usize {
        &self.id
    }

    fn label(&self) -> Cow<str> {
        format!("StupidTree {}", self.id).into()
    }

    fn is_leaf(&self) -> bool {
        self.children.is_empty()
    }

    fn child_iter(&self) -> Box<dyn Iterator<Item = Self>> {
        Box::new(self.children.clone().into_iter())
    }

    fn is_complete(&self) -> bool {
        true
    }
}

pub fn get_stupid_tree() -> Rc<StupidTree> {
    let mut stupid_subtree: Vec<StupidTree> = vec![];

    for i in 0..100 {
        stupid_subtree.push(StupidTree::new(40000 + i, vec![]));
    }

    let res = StupidTree::new(
        0,
        vec![
            StupidTree::new(1, vec![StupidTree::new(10001, vec![]), StupidTree::new(10002, vec![])]),
            StupidTree::new(
                2,
                vec![
                    StupidTree::new(20001, vec![]),
                    StupidTree::new(20002, vec![]),
                    StupidTree::new(20003, vec![StupidTree::new(2000301, vec![])]),
                ],
            ),
            StupidTree::new(4, vec![]),
            StupidTree::new(4, stupid_subtree),
        ],
    );

    Rc::new(res)
}