crusty_cards
A Rust library for working with playing cards and decks. Provides flexible primitives for building card games.
Installation
Add to your Cargo.toml:
[]
= "x.x.x"
Quick Start
use ;
// Create a standard 52-card deck
let mut deck = from_factory;
// Shuffle the deck
deck.shuffle;
// Deal cards
let card = deck.deal.unwrap;
println!; // e.g., "A♠"
// Create specific cards
let ace_of_spades = new;
Features
Cards
use ;
let card = new;
// Access properties
card.suit; // Suit::Hearts
card.rank; // Rank::Queen
card.color; // Color::Red
// Parse from string (supports Unicode)
let card: Card = "K♠".parse.unwrap;
let card: Card = "King♠".parse.unwrap;
let card: Card = "KingS".parse.unwrap;
let card: Card = "Kspades".parse.unwrap;
let card: Card = "Kingspades".parse.unwrap;
let card: Card = "KiNgsPaDeS".parse.unwrap;
Decks
use ;
// Create decks
let deck = from_factory; // 52 cards
let deck = from_factory; // 54 cards (with jokers)
let deck: Deck = "A♠ K♠ Q♠".parse.unwrap; // From string
// Shuffling
deck.shuffle; // Random shuffle
deck.riffle_shuffle; // Riffle shuffle
deck.overhand_shuffle; // Overhand shuffle
deck.cut; // Cut at position
// Dealing
let card = deck.deal; // From top
let card = deck.deal_bottom; // From bottom
let cards = deck.deal_n; // Multiple cards from top
let cards = deck.deal_n_bottom; // Multiple cards from bottom
// Adding cards
deck.add_card; // To top
deck.add_cards; // To top
deck.add_card_bottom; // To bottom
deck.add_cards_bottom; // To bottom
// Inspection
deck.len;
deck.is_empty;
deck.peek;
deck.contains;
deck.find;
Custom Sorting
use ;
let mut deck = from_factory;
// Sort with Ace high (default)
deck.sort_by_comparator;
// Sort with Ace low
deck.sort_by_comparator;
// Custom sort
deck.sort_by;
Serialization
use ;
let deck = from_factory;
// JSON
let json = deck.to_json.unwrap;
let deck = from_json.unwrap;
// YAML
let yaml = deck.to_yaml.unwrap;
let deck = from_yaml.unwrap;
// CSV
let csv = deck.as_csv;
let deck = from_csv.unwrap;
// Custom String
let custom = deck.as_str_delimiter
let deck = from_str_delimiter
Operator Overloads
use ;
let mut deck = default;
let card = new;
// Add/remove cards
deck += card; // Add card
deck -= card; // Remove card
// Combine decks
let combined = deck1 + deck2;
// Duplicate deck
let double_deck = deck * 2;
// Index access
let card = deck;
deck = another_card;
Custom Deck Factories
use ;
use VecDeque;
;
let deck = from_factory;
Custom Card Comparators
use ;
use Ordering;
Thread Safety
Card and Deck are both Send and Sync. For concurrent mutable access, wrap in Arc<Mutex<Deck>> or Arc<RwLock<Deck>>.
License
BEERWARE - If we meet one day and you think this stuff was worth it, you can buy me a beer in return.