From 5265bf1d1e63840c178df75cdb936761915e0f11 Mon Sep 17 00:00:00 2001 From: EdJoPaTo Date: Sat, 31 Oct 2020 21:31:54 +0100 Subject: [PATCH] fix: use getter for all_opened dont allow access to struct field --- examples/util/mod.rs | 2 +- src/flatten.rs | 17 ++++++----------- src/lib.rs | 8 ++++++-- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/examples/util/mod.rs b/examples/util/mod.rs index 77250ee..473d6ec 100644 --- a/examples/util/mod.rs +++ b/examples/util/mod.rs @@ -24,7 +24,7 @@ impl<'a> StatefulTree<'a> { } fn move_up_down(&mut self, down: bool) { - let visible = flatten(&self.state.opened, &self.items); + let visible = flatten(&self.state.get_all_opened(), &self.items); let current_identifier = self.state.selected(); let current_index = visible .iter() diff --git a/src/flatten.rs b/src/flatten.rs index 136ab9f..a11ecaa 100644 --- a/src/flatten.rs +++ b/src/flatten.rs @@ -2,7 +2,6 @@ use crate::identifier::{TreeIdentifier, TreeIdentifierVec}; use crate::TreeItem; -use std::collections::HashSet; pub struct Flattened<'a> { pub identifier: Vec, @@ -15,15 +14,12 @@ impl<'a> Flattened<'a> { } } -pub fn flatten<'a>( - opened: &HashSet, - items: &'a [TreeItem<'a>], -) -> Vec> { +pub fn flatten<'a>(opened: &[TreeIdentifierVec], items: &'a [TreeItem<'a>]) -> Vec> { internal(opened, items, &[]) } fn internal<'a>( - opened: &HashSet, + opened: &[TreeIdentifierVec], items: &'a [TreeItem<'a>], current: TreeIdentifier, ) -> Vec> { @@ -78,8 +74,7 @@ fn get_example_tree_items<'a>() -> Vec> { #[test] fn get_opened_nothing_opened_is_top_level() { let items = get_example_tree_items(); - let opened = HashSet::new(); - let result = flatten(&opened, &items); + let result = flatten(&[], &items); let result_text: Vec<_> = result .iter() .map(|o| get_naive_string_from_text(&o.item.text)) @@ -90,7 +85,7 @@ fn get_opened_nothing_opened_is_top_level() { #[test] fn get_opened_wrong_opened_is_only_top_level() { let items = get_example_tree_items(); - let opened = [vec![0], vec![1, 1]].iter().cloned().collect(); + let opened = [vec![0], vec![1, 1]]; let result = flatten(&opened, &items); let result_text: Vec<_> = result .iter() @@ -102,7 +97,7 @@ fn get_opened_wrong_opened_is_only_top_level() { #[test] fn get_opened_one_is_opened() { let items = get_example_tree_items(); - let opened = [vec![1]].iter().cloned().collect(); + let opened = [vec![1]]; let result = flatten(&opened, &items); let result_text: Vec<_> = result .iter() @@ -114,7 +109,7 @@ fn get_opened_one_is_opened() { #[test] fn get_opened_all_opened() { let items = get_example_tree_items(); - let opened = [vec![1], vec![1, 1]].iter().cloned().collect(); + let opened = [vec![1], vec![1, 1]]; let result = flatten(&opened, &items); let result_text: Vec<_> = result .iter() diff --git a/src/lib.rs b/src/lib.rs index 9578e9e..5c537ab 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,7 +19,7 @@ pub use self::flatten::flatten; pub struct TreeState { offset: usize, selected: TreeIdentifierVec, - pub opened: HashSet, + opened: HashSet, } impl Default for TreeState { @@ -64,6 +64,10 @@ impl TreeState { pub fn close_all(&mut self) { self.opened.clear(); } + + pub fn get_all_opened(&self) -> Vec { + self.opened.iter().cloned().collect() + } } #[derive(Debug, Clone)] @@ -184,7 +188,7 @@ impl<'a> StatefulWidget for Tree<'a> { return; } - let visible = flatten(&state.opened, &self.items); + let visible = flatten(&state.get_all_opened(), &self.items); if visible.is_empty() { return; }