use std::fmt::{Debug, Display};
use strum::EnumIter;
pub use strum::IntoEnumIterator;
pub mod italian;
pub mod french;
pub mod deck;
pub use crate::trick_taking;
pub trait Card: Display + Default + Sized + Debug + Copy + Eq + PartialEq {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, EnumIter, Hash)]
pub enum Suit {
Hearts,
Diamonds,
Clubs,
Spades,
}
impl Display for Suit {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let s = match self {
Suit::Hearts => "H",
Suit::Diamonds => "D",
Suit::Clubs => "C",
Suit::Spades => "S",
};
write!(f, "{s}")
}
}
#[cfg(test)]
pub mod test_utils {
use super::Suit;
use proptest::prelude::*;
pub fn suit_strategy() -> impl Strategy<Value = Suit> {
prop_oneof![
Just(Suit::Hearts),
Just(Suit::Diamonds),
Just(Suit::Clubs),
Just(Suit::Spades),
]
}
}