From b4d0c302b0fabc491286ba9a9da85ccbc6cb38d7 Mon Sep 17 00:00:00 2001 From: EdJoPaTo Date: Tue, 24 Oct 2023 19:34:01 +0200 Subject: [PATCH] perf!: accept Vec explicitly on mqttui I always cloned the vec implictly as into() cloned it. This wasted performance. BREAKING CHANGE: requires Vec now explicitly --- src/lib.rs | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index c90de3a..d94fa9d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -48,11 +48,8 @@ impl TreeState { self.selected.clone() } - pub fn select(&mut self, identifier: I) - where - I: Into>, - { - self.selected = identifier.into(); + pub fn select(&mut self, identifier: Vec) { + self.selected = identifier; // TODO: ListState does this. Is this relevant? if self.selected.is_empty() { @@ -155,7 +152,7 @@ impl TreeState { let selected = self.selected(); if !self.close(&selected) { let (head, _) = get_identifier_without_leaf(&selected); - self.select(head); + self.select(head.to_vec()); } } @@ -198,15 +195,14 @@ impl<'a> TreeItem<'a> { } #[must_use] - pub fn new(text: T, children: Children) -> Self + pub fn new(text: T, children: Vec>) -> Self where T: Into>, - Children: Into>>, { Self { text: text.into(), style: Style::new(), - children: children.into(), + children, } } @@ -260,7 +256,7 @@ impl<'a> TreeItem<'a> { /// terminal.draw(|f| { /// let area = f.size(); /// -/// let tree_widget = Tree::new(items.clone()) +/// let tree_widget = Tree::new(items) /// .block(Block::default().borders(Borders::ALL).title("Tree Widget")); /// /// f.render_stateful_widget(tree_widget, area, &mut state); @@ -292,12 +288,9 @@ pub struct Tree<'a> { impl<'a> Tree<'a> { #[must_use] - pub fn new(items: T) -> Self - where - T: Into>>, - { + pub const fn new(items: Vec>) -> Self { Self { - items: items.into(), + items, block: None, start_corner: Corner::TopLeft, style: Style::new(),