summaryrefslogtreecommitdiff
path: root/schist_desktop_gui/src/gui/components/bucket_navigation_entry.rs
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2026-02-01 21:03:01 +0000
committerJoe Carstairs <me@joeac.net>2026-02-01 21:03:01 +0000
commitc16f22f14b62c6576cc5a4c42a4f45c92b0241b2 (patch)
tree0d65dc504b489b42b455a6bda7aa1652ed6360f6 /schist_desktop_gui/src/gui/components/bucket_navigation_entry.rs
parent5166f6dbf06f911c5dcb21563274ca98285aca6c (diff)
BucketNavigationEntry may be BucketGroupName
Diffstat (limited to 'schist_desktop_gui/src/gui/components/bucket_navigation_entry.rs')
-rw-r--r--schist_desktop_gui/src/gui/components/bucket_navigation_entry.rs48
1 files changed, 44 insertions, 4 deletions
diff --git a/schist_desktop_gui/src/gui/components/bucket_navigation_entry.rs b/schist_desktop_gui/src/gui/components/bucket_navigation_entry.rs
index 79b0ba9..be11178 100644
--- a/schist_desktop_gui/src/gui/components/bucket_navigation_entry.rs
+++ b/schist_desktop_gui/src/gui/components/bucket_navigation_entry.rs
@@ -1,21 +1,61 @@
+use bucket_group_name::BucketGroupName;
use bucket_name_and_balance::BucketNameAndBalance;
use iced::Element;
+use itertools::Either;
use schist_models::Bucket;
use crate::gui::components::navigation;
+mod bucket_group_name;
mod bucket_name_and_balance;
#[derive(Clone, Debug, PartialEq)]
-pub struct BucketNavigationEntry(BucketNameAndBalance);
+pub struct BucketNavigationEntry(Either<BucketNameAndBalance, BucketGroupName>);
impl BucketNavigationEntry {
pub fn from_bucket(bucket: &Bucket) -> Self {
- Self(BucketNameAndBalance::new(bucket))
+ Self(Either::Left(BucketNameAndBalance::new(bucket)))
+ }
+
+ pub fn from_group_closed(group: &str) -> Self {
+ Self(Either::Right(BucketGroupName::new(group, false)))
+ }
+
+ pub fn from_group_open(group: &str) -> Self {
+ Self(Either::Right(BucketGroupName::new(group, true)))
+ }
+
+ pub fn is_bucket_and<P>(&self, pred: P) -> bool
+ where
+ P: Fn(&Bucket) -> bool,
+ {
+ self.0
+ .as_ref()
+ .map_left(|bucket_name_and_balance| pred(&bucket_name_and_balance.bucket))
+ .left_or(false)
+ }
+
+ pub fn is_group_and<P>(&self, pred: P) -> bool
+ where
+ P: Fn(&BucketGroupName) -> bool,
+ {
+ self.0.as_ref().map_right(pred).right_or(false)
}
pub fn to_string(&self) -> String {
- self.0.bucket.name.clone()
+ self.0
+ .as_ref()
+ .map_left(|bucket_name_and_balance| bucket_name_and_balance.bucket.name.clone())
+ .map_right(|bucket_group_name| bucket_group_name.group.clone())
+ .into_inner()
+ }
+
+ pub fn group(&self) -> String {
+ self.0
+ .as_ref()
+ .map_left(|bucket_name_and_balance| bucket_name_and_balance.bucket.group.clone())
+ .map_right(|bucket_group_name| bucket_group_name.group.clone())
+ .into_inner()
}
}
@@ -23,6 +63,6 @@ impl<'a> From<&'a BucketNavigationEntry>
for Element<'a, navigation::Message<BucketNavigationEntry>>
{
fn from(bucket_navigation_entry: &'a BucketNavigationEntry) -> Self {
- (&bucket_navigation_entry.0).into()
+ bucket_navigation_entry.0.as_ref().either_into()
}
}