diff --git a/benches/bench.rs b/benches/bench.rs index d2212a7..7b04039 100644 --- a/benches/bench.rs +++ b/benches/bench.rs @@ -74,14 +74,14 @@ fn init(criterion: &mut Criterion) { group.bench_function("empty", |bencher| { bencher.iter(|| { let items: Vec> = vec![]; - black_box(Tree::new(black_box(items))).unwrap(); + black_box(Tree::new(black_box(&items))).unwrap(); }); }); group.bench_function("example-items", |bencher| { bencher.iter(|| { let items = example_items(); - black_box(Tree::new(black_box(items))).unwrap(); + black_box(Tree::new(black_box(&items))).unwrap(); }); }); @@ -96,7 +96,7 @@ fn renders(criterion: &mut Criterion) { group.bench_function("empty", |bencher| { let items: Vec> = vec![]; - let tree = Tree::new(items).unwrap(); + let tree = Tree::new(&items).unwrap(); let mut state = TreeState::default(); bencher.iter_batched( || (tree.clone(), Buffer::empty(buffer_size)), @@ -109,7 +109,7 @@ fn renders(criterion: &mut Criterion) { group.bench_function("example-items", |bencher| { let items = example_items(); - let tree = Tree::new(items).unwrap(); + let tree = Tree::new(&items).unwrap(); let mut state = TreeState::default(); state.open(vec!["b"]); state.open(vec!["b", "d"]); diff --git a/examples/example.rs b/examples/example.rs index 05dde17..df353cb 100644 --- a/examples/example.rs +++ b/examples/example.rs @@ -81,7 +81,7 @@ impl App { fn draw(&mut self, frame: &mut Frame) { let area = frame.size(); - let widget = Tree::new(self.items.clone()) + let widget = Tree::new(&self.items) .expect("all item identifiers are unique") .block( Block::bordered() diff --git a/src/lib.rs b/src/lib.rs index 0ea3bc3..a13ee7d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -42,7 +42,7 @@ mod tree_state; /// terminal.draw(|frame| { /// let area = frame.size(); /// -/// let tree_widget = Tree::new(items) +/// let tree_widget = Tree::new(&items) /// .expect("all item identifiers are unique") /// .block(Block::bordered().title("Tree Widget")); /// @@ -52,7 +52,7 @@ mod tree_state; /// ``` #[derive(Debug, Clone)] pub struct Tree<'a, Identifier> { - items: Vec>, + items: &'a [TreeItem<'a, Identifier>], block: Option>, scrollbar: Option>, @@ -81,7 +81,7 @@ where /// # Errors /// /// Errors when there are duplicate identifiers in the children. - pub fn new(items: Vec>) -> std::io::Result { + pub fn new(items: &'a [TreeItem<'a, Identifier>]) -> std::io::Result { let identifiers = items .iter() .map(|item| &item.identifier) @@ -166,7 +166,7 @@ where fn tree_new_errors_with_duplicate_identifiers() { let item = TreeItem::new_leaf("same", "text"); let another = item.clone(); - Tree::new(vec![item, another]).unwrap(); + Tree::new(&[item, another]).unwrap(); } impl StatefulWidget for Tree<'_, Identifier> @@ -190,7 +190,7 @@ where return; } - let visible = state.flatten(&self.items); + let visible = state.flatten(self.items); state.last_biggest_index = visible.len().saturating_sub(1); if visible.is_empty() { return; @@ -349,7 +349,8 @@ mod render_tests { #[must_use] #[track_caller] fn render(width: u16, height: u16, state: &mut TreeState<&'static str>) -> Buffer { - let tree = Tree::new(TreeItem::example()).unwrap(); + let items = TreeItem::example(); + let tree = Tree::new(&items).unwrap(); let area = Rect::new(0, 0, width, height); let mut buffer = Buffer::empty(area); StatefulWidget::render(tree, area, &mut buffer, state);