Expand description
§crusty_cards
A Rust library for working with playing cards and decks.
This crate provides flexible primitives for building card games, including:
Card,Suit,Rank, andColortypes- A
Deckcollection with shuffling, dealing, and manipulation methods - Customizable card ordering via the
CardComparatortrait - Deck generation via the
DeckFactorytrait - Serialization support (JSON, YAML, CSV)
§Quick Start
use crusty_cards::{Deck, Standard52, Card, Suit, Rank};
// Create a standard 52-card deck
let mut deck = Deck::from_factory(Standard52);
// Shuffle and deal
deck.shuffle();
let card = deck.deal().unwrap();
// Create specific cards
let ace_of_spades = Card::new(Suit::Spades, Rank::Ace);§Custom Deck Factories
use crusty_cards::{Card, Deck, DeckFactory, Suit, Rank};
use std::collections::VecDeque;
struct PinochleDeck;
impl DeckFactory for PinochleDeck {
fn generate(&self) -> VecDeque<Card> {
let ranks = [Rank::Nine, Rank::Ten, Rank::Jack, Rank::Queen, Rank::King, Rank::Ace];
let mut cards = VecDeque::new();
for _ in 0..2 {
for suit in Suit::ALL {
for rank in ranks {
cards.push_back(Card::new(suit, rank));
}
}
}
cards
}
}
let deck = Deck::from_factory(PinochleDeck);
assert_eq!(deck.len(), 48);§Thread Safety
Both Card and Deck implement Send and Sync, making them safe
to use across threads. For concurrent mutable access, wrap in
Arc<Mutex<Deck>> or Arc<RwLock<Deck>>.
Re-exports§
pub use objects::card::Card;pub use objects::color::Color;pub use objects::deck::Deck;pub use objects::rank::Rank;pub use objects::suit::Suit;pub use traits::comparator::AceLowComparator;pub use traits::comparator::BridgeComparator;pub use traits::comparator::CardComparator;pub use traits::comparator::StandardComparator;pub use traits::comparator::TrumpComparator;pub use traits::factory::DeckFactory;pub use utils::standard::Standard52;pub use utils::standard::Standard54;