diff options
author | Kjetil Orbekk <kj@orbekk.com> | 2022-12-18 12:38:13 -0500 |
---|---|---|
committer | Kjetil Orbekk <kj@orbekk.com> | 2022-12-18 12:38:13 -0500 |
commit | e7167b17d96cea1c31ca77e36cc0248c18b818c6 (patch) | |
tree | 0f2c4bd1bdafb72164431526e610a297f3c0c43a /server | |
parent | b5940c3ae2b6e23a6373383d5d78958fb23cb611 (diff) |
Implement advance_play for passing bidding bot
Diffstat (limited to 'server')
-rw-r--r-- | server/src/play.rs | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/server/src/play.rs b/server/src/play.rs index 17d5819..c4dc5c7 100644 --- a/server/src/play.rs +++ b/server/src/play.rs @@ -1,9 +1,10 @@ use async_trait::async_trait; -use protocol::{bridge_engine::{GameState, Player, Bid, Deal}}; +use protocol::{bridge_engine::{GameState, Player, Bid, Deal, BiddingStatePlayerView}, simple_bots::AlwaysPassBiddingBot, bot::BiddingBot}; use rand::random; use serde::{Deserialize, Serialize}; use serde_json::json; use sqlx::{query, PgPool}; +use tracing::error; use uuid::Uuid; use crate::error::BridgeError; @@ -140,8 +141,24 @@ impl<J: Journal> Table<J> { } -pub fn advance_play<J: Journal>(table: &mut Table<J>) { - todo!() +pub async fn advance_play<J: Journal>(table: &mut Table<J>) -> Result<(), BridgeError> { + let current_player = match table.game().current_player() { + Some(player) => player, + None => { + return Err(BridgeError::InvalidRequest(format!("No play to make for game"))); + }, + }; + match table.game() { + GameState::Bidding(bidding) => { + let player_view = BiddingStatePlayerView::from_bidding_state(bidding, current_player); + let bot = AlwaysPassBiddingBot {}; + let bid = bot.bid(&player_view).await; + table.bid(bid).await?; + Ok(()) + }, + GameState::Play(_) => todo!(), + GameState::PassedOut { dealer, deal, bidding } => todo!(), + } } #[cfg(test)] @@ -215,7 +232,7 @@ mod test { async fn test_advance_play() { let mut t1: Table<TestJournal> = Table::new(Default::default()).await.unwrap(); let player = t1.game().current_player(); - advance_play(&mut t1); + advance_play(&mut t1).await.unwrap(); assert_ne!(player, t1.game().current_player()); } } |