feat!(card): Deck methods get get_with.. return Result<Card, MyError>
authorMA Beaudet <ma@beaudet.xyz>
Mon, 8 Nov 2021 15:02:02 +0000 (16:02 +0100)
committerMA Beaudet <ma@beaudet.xyz>
Mon, 8 Nov 2021 15:02:02 +0000 (16:02 +0100)
src/card.rs
src/lib.rs

index 709218a..b5d6c9c 100644 (file)
@@ -41,27 +41,31 @@ impl Deck {
         Self::default()
     }
 
-    pub fn get_with_rules(&mut self, rules: &Rules) -> Cards {
+    pub fn get_with_rules(&mut self, rules: &Rules) -> Result<Cards, MyError> {
         let v = match rules {
-            Rules::Classic => self.get(5),
+            Rules::Classic => self.get(5)?,
 
-            Rules::Holdem => self.get(2),
+            Rules::Holdem => self.get(2)?,
         };
-        v.unwrap()
+        Ok(v)
     }
 
-    pub fn get_with_rules_and_player_nb(&mut self, rules: &Rules, player_nb: usize) -> Vec<Cards> {
+    pub fn get_with_rules_and_player_nb(
+        &mut self,
+        rules: &Rules,
+        player_nb: usize,
+    ) -> Result<Vec<Cards>, MyError> {
         (0..player_nb)
             .into_iter()
-            .map(|_| self.get_with_rules(rules))
+            .map(|_| Ok(self.get_with_rules(rules)?))
             .collect()
     }
 
-    pub fn get(&mut self, n: usize) -> Option<Cards> {
+    pub fn get(&mut self, n: usize) -> Result<Cards, MyError> {
         if self.0 .0.len() < n {
-            None
+            Err(MyError::IndexError)
         } else {
-            Some(Cards(self.0 .0.split_off(self.0 .0.len() - n)))
+            Ok(Cards(self.0 .0.split_off(self.0 .0.len() - n)))
         }
     }
 
index b2f5ac9..fc09bd2 100644 (file)
@@ -26,6 +26,7 @@ pub enum MyError {
     InvalidLength,
     InvalidRank,
     InvalidSuit,
+    IndexError
 }
 
 impl std::error::Error for MyError {}