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
This commit is contained in:
EdJoPaTo
2023-10-24 19:34:01 +02:00
parent 87e1bb4b2f
commit b4d0c302b0
+8 -15
View File
@@ -48,11 +48,8 @@ impl TreeState {
self.selected.clone() self.selected.clone()
} }
pub fn select<I>(&mut self, identifier: I) pub fn select(&mut self, identifier: Vec<usize>) {
where self.selected = identifier;
I: Into<Vec<usize>>,
{
self.selected = identifier.into();
// TODO: ListState does this. Is this relevant? // TODO: ListState does this. Is this relevant?
if self.selected.is_empty() { if self.selected.is_empty() {
@@ -155,7 +152,7 @@ impl TreeState {
let selected = self.selected(); let selected = self.selected();
if !self.close(&selected) { if !self.close(&selected) {
let (head, _) = get_identifier_without_leaf(&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] #[must_use]
pub fn new<T, Children>(text: T, children: Children) -> Self pub fn new<T>(text: T, children: Vec<TreeItem<'a>>) -> Self
where where
T: Into<Text<'a>>, T: Into<Text<'a>>,
Children: Into<Vec<TreeItem<'a>>>,
{ {
Self { Self {
text: text.into(), text: text.into(),
style: Style::new(), style: Style::new(),
children: children.into(), children,
} }
} }
@@ -260,7 +256,7 @@ impl<'a> TreeItem<'a> {
/// terminal.draw(|f| { /// terminal.draw(|f| {
/// let area = f.size(); /// 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")); /// .block(Block::default().borders(Borders::ALL).title("Tree Widget"));
/// ///
/// f.render_stateful_widget(tree_widget, area, &mut state); /// f.render_stateful_widget(tree_widget, area, &mut state);
@@ -292,12 +288,9 @@ pub struct Tree<'a> {
impl<'a> Tree<'a> { impl<'a> Tree<'a> {
#[must_use] #[must_use]
pub fn new<T>(items: T) -> Self pub const fn new(items: Vec<TreeItem<'a>>) -> Self {
where
T: Into<Vec<TreeItem<'a>>>,
{
Self { Self {
items: items.into(), items,
block: None, block: None,
start_corner: Corner::TopLeft, start_corner: Corner::TopLeft,
style: Style::new(), style: Style::new(),