From 99b49e629e2372962b082325503c33e20a458818 Mon Sep 17 00:00:00 2001 From: funman300 Date: Mon, 8 Jun 2026 11:20:39 -0700 Subject: [PATCH] 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 --- klondike/Cargo.toml | 4 ++++ klondike/src/lib.rs | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/klondike/Cargo.toml b/klondike/Cargo.toml index 1c55cb4..344a6bf 100644 --- a/klondike/Cargo.toml +++ b/klondike/Cargo.toml @@ -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 diff --git a/klondike/src/lib.rs b/klondike/src/lib.rs index 48b491d..8c2a7b4 100644 --- a/klondike/src/lib.rs +++ b/klondike/src/lib.rs @@ -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 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),