impl Default for RedisConfig {
fn default() -> Self {
- Self {
- addr: default_redis_addr(),
- connect_timeout_seconds: default_redis_connect_timeout_seconds(),
- }
+ Self { addr: default_redis_addr(), connect_timeout_seconds: default_redis_connect_timeout_seconds() }
}
}
use itertools::Itertools;
-use crate::card::{Card, Rank};
use crate::card::Rank::*;
+use crate::card::{Card, Rank};
#[derive(Copy, Clone, Debug)]
pub struct Score {
}
pub fn score_pegging(cards: &[Card]) -> PeggingScore {
- let mut score = PeggingScore {
- fifteen: 0,
- thirty_one: 0,
- pair: 0,
- run: 0,
- };
-
+ let mut score = PeggingScore { fifteen: 0, thirty_one: 0, pair: 0, run: 0 };
+
if sum_value(cards) == 15 {
score.fifteen += 2;
}
}
pub fn score_4_card_cribbage_hand(cards: [Card; 4], turnup: Card, is_box: bool) -> Score {
- let mut score = Score {
- nob: 0,
- flush: 0,
- fifteen: 0,
- pair: 0,
- run: 0,
- };
+ let mut score = Score { nob: 0, flush: 0, fifteen: 0, pair: 0, run: 0 };
for card in &cards {
if card.rank == Jack && card.suit == turnup.suit {
}
for &run_length in &[5, 4, 3] {
- let runs = cards.iter().cloned().combinations(run_length)
- .filter(|cards| is_run(cards))
- .count();
+ let runs = cards.iter().cloned().combinations(run_length).filter(|cards| is_run(cards)).count();
if runs > 0 {
score.run += (run_length * runs) as u8;
break;
let score = score_4_card_cribbage_hand([FIVE_OF_CLUBS, FIVE_OF_DIAMONDS, FIVE_OF_HEARTS, JACK_OF_SPADES], TEN_OF_SPADES, false);
assert_eq!(21, score.points());
- assert_eq!("Fifteen two, fifteen four, fifteen six, fifteen eight, fifteen ten, fifteen twelve, fifteen fourteen and six and one for his nob is 21", format!("{}", score));
+ assert_eq!(
+ "Fifteen two, fifteen four, fifteen six, fifteen eight, fifteen ten, fifteen twelve, fifteen fourteen and six and one for his nob is 21",
+ format!("{}", score)
+ );
let score = score_4_card_cribbage_hand([SIX_OF_CLUBS, SEVEN_OF_DIAMONDS, EIGHT_OF_HEARTS, NINE_OF_SPADES], NINE_OF_CLUBS, false);
assert_eq!(16, score.points());
]"#;
let actions = serde_json::from_str(actions).unwrap();
- let settings = r#"{"format":"TexasHoldEm","title":"4-Player TexasHoldEm Test","max_players":4,"small_blind":25,"starting_stack":1000,"hide_cards":true}"#;
+ let settings =
+ r#"{"format":"TexasHoldEm","title":"4-Player TexasHoldEm Test","max_players":4,"small_blind":25,"starting_stack":1000,"hide_cards":true}"#;
let settings = serde_json::from_str(settings).unwrap();
let seed = r#"{"rng":"ChaCha20","seed":"48e2f45eb4a1ac6bc4ab4f2368ba2d9b0d7c1f132d7fc7f51036e92112dae136"}"#;
]"#;
let actions = serde_json::from_str(actions).unwrap();
- let settings = r#"{"format":"TexasHoldEm","title":"4-Player TexasHoldEm Test","max_players":4,"small_blind":25,"starting_stack":1000,"hide_cards":true}"#;
+ let settings =
+ r#"{"format":"TexasHoldEm","title":"4-Player TexasHoldEm Test","max_players":4,"small_blind":25,"starting_stack":1000,"hide_cards":true}"#;
let settings = serde_json::from_str(settings).unwrap();
let seed = r#"{"rng":"ChaCha20","seed":"48e2f45eb4a1ac6bc4ab4f2368ba2d9b0d7c1f132d7fc7f51036e92112dae136"}"#;
]"#;
let actions = serde_json::from_str(actions).unwrap();
- let settings = r#"{"format":"TexasHoldEm","title":"4-Player TexasHoldEm Test","max_players":4,"small_blind":25,"starting_stack":1000,"hide_cards":true}"#;
+ let settings =
+ r#"{"format":"TexasHoldEm","title":"4-Player TexasHoldEm Test","max_players":4,"small_blind":25,"starting_stack":1000,"hide_cards":true}"#;
let settings = serde_json::from_str(settings).unwrap();
let seed = r#"{"rng":"ChaCha20","seed":"092b99f45313fff167029dc7420ed69a92becae492e09b65bc06ddcaae3c9e9c"}"#;
]"#;
let actions = serde_json::from_str(actions).unwrap();
- let settings = r#"{"format":"TexasHoldEm","title":"4-Player TexasHoldEm Test","max_players":4,"small_blind":25,"starting_stack":1000,"hide_cards":true}"#;
+ let settings =
+ r#"{"format":"TexasHoldEm","title":"4-Player TexasHoldEm Test","max_players":4,"small_blind":25,"starting_stack":1000,"hide_cards":true}"#;
let settings = serde_json::from_str(settings).unwrap();
let seed = r#"{"rng":"ChaCha20","seed":"092b99f45313fff167029dc7420ed69a92becae492e09b65bc06ddcaae3c9e9c"}"#;
]"#;
let actions = serde_json::from_str(actions).unwrap();
- let settings = r#"{"format":"TexasHoldEm","title":"4-Player TexasHoldEm Test","max_players":4,"small_blind":25,"starting_stack":1000,"hide_cards":true}"#;
+ let settings =
+ r#"{"format":"TexasHoldEm","title":"4-Player TexasHoldEm Test","max_players":4,"small_blind":25,"starting_stack":1000,"hide_cards":true}"#;
let settings = serde_json::from_str(settings).unwrap();
let seed = r#"{"rng":"ChaCha20","seed":"092b99f45313fff167029dc7420ed69a92becae492e09b65bc06ddcaae3c9e9c"}"#;
use crate::client::new_client;
use crate::config::Config;
use crate::dealer::{spawn_dealers, Partition};
-use crate::pubsub::{HandleClientInterestSubscriptionsError, handle_client_interest_subscriptions};
+use crate::pubsub::{handle_client_interest_subscriptions, HandleClientInterestSubscriptionsError};
use crate::server::Server;
async fn handle_signals(mut signals: Signals) {
#[derive(Parser)]
#[clap(version, author, about)]
struct Args {
+ /// Path to configuration file in TOML format
#[clap(short = 'c', long = "config")]
config: Option<PathBuf>,
#[clap(subcommand)]
run_dealer = false;
partition = Partition::default();
}
- Some(Command::Dealer { partition: part}) => {
+ Some(Command::Dealer { partition: part }) => {
run_server = false;
run_dealer = true;
partition = part;
RedisConnectionDropped,
}
-pub async fn handle_client_interest_subscriptions(mut connection: PubSub, mut new_clients: Receiver<ClientInterestSender>) -> HandleClientInterestSubscriptionsError {
+pub async fn handle_client_interest_subscriptions(
+ mut connection: PubSub,
+ mut new_clients: Receiver<ClientInterestSender>,
+) -> HandleClientInterestSubscriptionsError {
debug!("init");
let mut clients: Vec<Client> = Vec::new();
loop {