feat(klondike): add optional serde feature for instruction/pile serialization

Adds serde Serialize/Deserialize derives (behind the `serde` feature flag)
to Tableau, Foundation, KlondikePile, SkipCards, TableauStack,
KlondikePileStack, DstFoundation, DstTableau, and KlondikeInstruction.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
funman300
2026-06-08 11:20:39 -07:00
parent 2eaa99e82d
commit 99b49e629e
2 changed files with 13 additions and 0 deletions
+4
View File
@@ -3,9 +3,13 @@ name = "klondike"
version = "0.3.0"
edition = "2024"
[features]
serde = ["dep:serde"]
[dependencies]
card_game.workspace = true
rand = { version = "0.10.1", default-features = false, features = ["std_rng"] }
serde = { version = "1", optional = true, default-features = false, features = ["derive"] }
[lints]
workspace = true
+9
View File
@@ -121,6 +121,7 @@ impl KlondikeStats {
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Tableau {
Tableau1,
Tableau2,
@@ -147,6 +148,7 @@ impl Tableau {
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Foundation {
Foundation1,
Foundation2,
@@ -167,6 +169,7 @@ impl Foundation {
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum KlondikePile {
Tableau(Tableau),
Stock,
@@ -200,6 +203,7 @@ impl From<Foundation> for KlondikePile {
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum SkipCards {
Skip0,
Skip1,
@@ -238,6 +242,7 @@ impl SkipCards {
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TableauStack {
pub tableau: Tableau,
pub skip_cards: SkipCards,
@@ -271,6 +276,7 @@ impl TableauStack {
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum KlondikePileStack {
Tableau(TableauStack),
Stock,
@@ -294,6 +300,7 @@ impl KlondikePileStack {
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DstFoundation {
pub src: KlondikePile,
pub foundation: Foundation,
@@ -317,6 +324,7 @@ impl DstFoundation {
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct DstTableau {
pub src: KlondikePileStack,
pub tableau: Tableau,
@@ -340,6 +348,7 @@ impl DstTableau {
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum KlondikeInstruction {
DstFoundation(DstFoundation),
DstTableau(DstTableau),