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),