diff --git a/dash-frontend/src/tab/donate.rs b/dash-frontend/src/tab/donate.rs index e934fd8b..b039cfff 100644 --- a/dash-frontend/src/tab/donate.rs +++ b/dash-frontend/src/tab/donate.rs @@ -64,35 +64,22 @@ async fn request_supporters(tasks: Tasks) { } } -fn tier_pretty_print(tier: &str) -> String { - format!("{} Tier", wlx_common::locale::capitalize_string(tier)) -} - -fn tier_color(tier: &str) -> &'static str { - match tier { - "platinum" => "#aaffff", - "gold" => "#ffffaa", - "silver" => "#cccccc", - "bronze" => "#ffaa66", - _ => "on_background", - } -} impl TabDonate { fn set_supporters(&mut self, layout: &mut Layout, supporters: cached_fetcher::Supporters) -> anyhow::Result<()> { let globals = layout.state.globals.clone(); layout.remove_children(self.id_current_supporters); - let mut current_tier = ""; + let mut current_tier = None; let mut tier_parent = WidgetID::default(); for supporter in &supporters.supporters { - if supporter.tier != current_tier { - current_tier = &supporter.tier; + if Some(supporter.tier) != current_tier { + current_tier = Some(supporter.tier); let mut params = TemplateParams::new(); - params.insert_str("text", tier_pretty_print(&supporter.tier)); - params.insert("color", tier_color(&supporter.tier)); + params.insert_str("text", supporter.tier.pretty_str()); + params.insert("color", supporter.tier.color_str()); self.state.realize_template( &doc_params(&globals), "TierCell", diff --git a/dash-frontend/src/util/cached_fetcher.rs b/dash-frontend/src/util/cached_fetcher.rs index e04fcba8..27fda485 100644 --- a/dash-frontend/src/util/cached_fetcher.rs +++ b/dash-frontend/src/util/cached_fetcher.rs @@ -3,17 +3,42 @@ use std::time::{SystemTime, UNIX_EPOCH}; use crate::util::{networking::http_client, steam_utils::AppID}; use anyhow::Context; use serde::{Deserialize, Serialize}; +use strum::{AsRefStr}; use wlx_common::cache_dir; fn get_unix_timestamp() -> u64 { SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs() } +#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, AsRefStr)] +#[serde(rename_all = "snake_case")] +pub enum SupporterTier { + Platinum, + Gold, + Silver, + Bronze, +} + +impl SupporterTier { + pub fn pretty_str(self) -> String { + format!("{self:?} Tier") + } + + pub fn color_str(self) -> &'static str { + match self { + Self::Platinum => "#aaffff", + Self::Gold => "#ffffaa", + Self::Silver => "#cccccc", + Self::Bronze => "#ffaa66", + } + } +} + #[derive(Serialize, Deserialize)] pub struct Supporter { pub username: String, pub date: String, - pub tier: String, + pub tier: SupporterTier, pub contribution_count: u32, }