From 503ad537216c4ecb0b1cc2437eb6075c30806be7 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Fri, 3 Apr 2026 02:09:43 +0100 Subject: [PATCH] card: Rank|Suit::{iter_all, cards} iter_all generates an iterator over every valid rank in order. cards generates an iterator over all cards for a given suit/rank. --- src/card.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/card.rs b/src/card.rs index 15cd168..ce53236 100644 --- a/src/card.rs +++ b/src/card.rs @@ -40,6 +40,29 @@ impl Rank { pub fn ordinary_order(&self) -> i32 { ((*self as i32) + 2) % 13 } + + /** Generate an iterator over all ranks. */ + pub fn iter_all() -> impl Iterator { + (0..13).filter_map(|x| Rank::try_from(x).ok()) + } + + /** Generate an iterator over all cards within a rank, ordered by Suit. */ + pub fn cards(&self) -> impl Iterator { + let n = *self as i64; + ((n * 4)..((n + 1) * 4)).map(Card::from) + } +} + +impl Suit { + /** Generate an iterator over all suits. */ + pub fn iter_all() -> impl Iterator { + (0..4).filter_map(|x| Suit::try_from(x).ok()) + } + + /** Generate an iterator over all cards within a suit, ordered by Suit. */ + pub fn cards(&self) -> impl Iterator { + Rank::iter_all().map(|rank| Card::make_playing_card(rank, *self)) + } } impl PlayingCard {