From d1fbe944a454d0ac3cd1987a93769a988b4afb2a Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Fri, 22 Dec 2023 13:09:09 +0100 Subject: [PATCH] refactor: use enum instead of raw u8 value --- examples/arsnova-client-tui.rs | 12 ++++++------ src/client.rs | 28 ++++++++++++++++++++++++++-- src/lib.rs | 2 +- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/examples/arsnova-client-tui.rs b/examples/arsnova-client-tui.rs index 85509c1..97f725f 100644 --- a/examples/arsnova-client-tui.rs +++ b/examples/arsnova-client-tui.rs @@ -34,7 +34,7 @@ use ratatui::Terminal; use tokio::select; use tokio::sync::mpsc::{channel, Receiver}; -use arsnova_client::{Client, Feedback, FeedbackHandler}; +use arsnova_client::{Client, Feedback, FeedbackHandler, FeedbackValue}; #[derive(Parser)] #[command(author, version, about = "Terminal-based ARSnova live feedback client", long_about = None)] @@ -64,7 +64,7 @@ async fn main() -> Result<(), ()> { let (tx, rx) = channel::(10); - let (fb_tx, fb_rx) = channel::(10); + let (fb_tx, fb_rx) = channel::(10); let _ = tx .clone() @@ -94,16 +94,16 @@ async fn main() -> Result<(), ()> { match key.code { KeyCode::Esc => break, KeyCode::Char('a') | KeyCode::Char('1') => { - let _ = fb_tx.send(0).await; + let _ = fb_tx.send(FeedbackValue::VeryGood).await; } KeyCode::Char('b') | KeyCode::Char('2') => { - let _ = fb_tx.send(1).await; + let _ = fb_tx.send(FeedbackValue::Good).await; } KeyCode::Char('c') | KeyCode::Char('3') => { - let _ = fb_tx.send(2).await; + let _ = fb_tx.send(FeedbackValue::Bad).await; } KeyCode::Char('d') | KeyCode::Char('4') => { - let _ = fb_tx.send(3).await; + let _ = fb_tx.send(FeedbackValue::VeryBad).await; } _ => {} }; diff --git a/src/client.rs b/src/client.rs index c7f72a2..a46d933 100644 --- a/src/client.rs +++ b/src/client.rs @@ -174,6 +174,30 @@ pub enum FeedbackHandler { Sender(Sender), } +/// A possible feedback value +pub enum FeedbackValue { + VeryGood, + A, + Good, + B, + Bad, + C, + VeryBad, + D, +} + +impl FeedbackValue { + /// Returns internal u8 representation + fn into_u8(self) -> u8 { + match self { + FeedbackValue::VeryGood | FeedbackValue::A => 0, + FeedbackValue::Good | FeedbackValue::B => 1, + FeedbackValue::Bad | FeedbackValue::C => 2, + FeedbackValue::VeryBad | FeedbackValue::D => 3, + } + } +} + #[derive(Clone, Debug, PartialEq, Eq)] pub enum ClientError { ConnectionError, @@ -368,7 +392,7 @@ impl Client { pub async fn register_feedback_receiver( &self, short_id: &str, - mut receiver: Receiver, + mut receiver: Receiver, ) -> Result<(), ClientError> { let room_info = self.get_room_info(short_id).await?; @@ -401,7 +425,7 @@ impl Client { "payload": { "roomId": room_info.id, "userId": user_id, - "value": value + "value": value.into_u8() } }) .to_string(); diff --git a/src/lib.rs b/src/lib.rs index 83f4ca7..262ffff 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,4 +19,4 @@ pub mod client; -pub use client::{Client, Feedback, FeedbackHandler, RoomInfo}; +pub use client::{Client, Feedback, FeedbackHandler, FeedbackValue, RoomInfo};