summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <kj@orbekk.com>2022-12-25 09:28:10 -0500
committerKjetil Orbekk <kj@orbekk.com>2022-12-25 09:28:10 -0500
commit0f2910c70172992fdb3a385816f3df3f4336ffc4 (patch)
tree14528db71b349954993943fd87afab091960d6d9
parenta8dde0c39b161105f054bfb8201443ee2cfb0040 (diff)
Getr rid of TurnInPlayResult and use MoveResult instead
-rw-r--r--protocol/src/bridge_engine.rs44
1 files changed, 11 insertions, 33 deletions
diff --git a/protocol/src/bridge_engine.rs b/protocol/src/bridge_engine.rs
index fb4efa7..0acdca9 100644
--- a/protocol/src/bridge_engine.rs
+++ b/protocol/src/bridge_engine.rs
@@ -3,7 +3,7 @@ use crate::{
play_result::MoveResult,
};
use anyhow::{anyhow, bail};
-use log::{error, info};
+use log::info;
use rand::{
distributions::Standard,
prelude::{Distribution, SliceRandom},
@@ -122,12 +122,6 @@ pub struct TurnInPlay {
pub trick: Trick,
}
-#[derive(PartialEq, Eq, Debug)]
-pub enum TurnInPlayResult {
- InProgress(TurnInPlay),
- Trick(Trick),
-}
-
impl TurnInPlay {
pub fn new(p: Player) -> TurnInPlay {
TurnInPlay {
@@ -154,12 +148,12 @@ impl TurnInPlay {
&self.trick.cards_played[..]
}
- pub fn play(mut self: TurnInPlay, card: Card) -> TurnInPlayResult {
+ pub fn play(mut self: TurnInPlay, card: Card) -> MoveResult<TurnInPlay, Trick> {
self.trick.cards_played.push(card);
if self.trick.cards_played.len() >= 4 {
- return TurnInPlayResult::Trick(self.trick);
+ return MoveResult::Next(self.trick);
}
- TurnInPlayResult::InProgress(self)
+ MoveResult::Current(self)
}
pub fn current_player(&self) -> Player {
@@ -243,13 +237,13 @@ impl DealInPlay {
player_cards.remove(i);
Ok(match self.in_progress.play(card) {
- TurnInPlayResult::InProgress(turn) => {
+ MoveResult::Current(turn) => {
DealInPlayResult::InProgress(Self {
in_progress: turn,
..self
})
}
- TurnInPlayResult::Trick(trick) => {
+ MoveResult::Next(trick) => {
let trick_winner = trick.winner(self.trump_suit);
let mut tricks = self.tricks_played;
tricks.push(trick);
@@ -1156,33 +1150,17 @@ mod tests {
assert_eq!(Player::South, Player::South.many_next(4 * 1234567890));
}
- fn as_turn(p: TurnInPlayResult) -> TurnInPlay {
- if let TurnInPlayResult::InProgress(t) = p {
- t
- } else {
- panic!("expected PlayResult::InProgress(): {:?}", p);
- }
- }
-
- fn as_trick(p: TurnInPlayResult) -> Trick {
- if let TurnInPlayResult::Trick(t) = p {
- t
- } else {
- panic!("expected PlayResult::Trick(): {:?}", p);
- }
- }
-
#[test]
fn play_turn() {
let turn = TurnInPlay::new(Player::South);
assert_eq!(turn.current_player(), Player::South);
- let turn = as_turn(turn.play("♣4".parse().unwrap()));
+ let turn = turn.play("♣4".parse().unwrap()).current().unwrap();
assert_eq!(turn.current_player(), Player::West);
- let turn = as_turn(turn.play("♥A".parse().unwrap()));
+ let turn = turn.play("♥A".parse().unwrap()).current().unwrap();
assert_eq!(turn.current_player(), Player::North);
- let turn = as_turn(turn.play("♣4".parse().unwrap()));
+ let turn = turn.play("♣4".parse().unwrap()).current().unwrap();
assert_eq!(turn.current_player(), Player::East);
- let trick = as_trick(turn.play("♣A".parse().unwrap()));
+ let trick = turn.play("♣A".parse().unwrap()).next().unwrap();
assert_eq!(
trick,
Trick {
@@ -1199,7 +1177,7 @@ mod tests {
fn lead_suit() {
let turn = TurnInPlay::new(Player::South);
assert_eq!(turn.suit(), None);
- let turn = as_turn(turn.play("♣4".parse().unwrap()));
+ let turn = turn.play("♣4".parse().unwrap()).current().unwrap();
assert_eq!(turn.suit(), Some("♣".parse().unwrap()));
}