feat: apply C-SERDE to data structures
authorMA Beaudet <ma@beaudet.xyz>
Tue, 9 Nov 2021 10:52:54 +0000 (11:52 +0100)
committerMA Beaudet <ma@beaudet.xyz>
Tue, 9 Nov 2021 10:52:54 +0000 (11:52 +0100)
Cargo.toml
src/card.rs
src/evaluator.rs
src/lib.rs

index b6c1a26..90ef266 100644 (file)
@@ -13,4 +13,5 @@ default = ["rand"]
 [dependencies]
 rand = { version = "0.8.4", optional = true }
 rayon = { version = "1.5.1", optional = true }
+serde = { version = "1.0", optional = true, features = ["derive"] }
 wasm-bindgen = "0.2.78"
index 5710c41..cfdb93a 100644 (file)
@@ -2,6 +2,10 @@ use std::str::FromStr;
 
 use crate::{constants::PRIMES, MyError, Rules};
 
+#[cfg(feature = "serde")]
+use serde::{Deserialize, Serialize};
+
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
 #[derive(Debug, Default, Clone)]
 pub struct Cards(pub(crate) Vec<Card>);
 
@@ -39,6 +43,7 @@ impl From<Cards> for Vec<u32> {
     }
 }
 
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
 #[derive(Debug, Clone)]
 pub struct Deck(pub(crate) Cards);
 
@@ -113,8 +118,9 @@ impl Default for Deck {
 ///     Card::from_str("Kd").unwrap().get(),
 ///     0b00001000_00000000_01001011_00100101_u32
 /// );
-#[repr(transparent)]
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
 #[derive(Debug, Clone, Copy)]
+#[repr(transparent)]
 pub struct Card(pub(crate) u32);
 
 impl Card {
index bd2c270..ce492d7 100644 (file)
@@ -6,6 +6,10 @@ use crate::{
     Algorithm, MyError, Rules,
 };
 
+#[cfg(feature = "serde")]
+use serde::{Deserialize, Serialize};
+
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
 #[derive(Debug)]
 pub struct Evaluator {
     pub rules: Rules,
index e56fa0c..b343571 100644 (file)
@@ -19,6 +19,9 @@ use constants::{
     VALUE_STR,
 };
 
+#[cfg(feature = "serde")]
+use serde::{Deserialize, Serialize};
+
 use wasm_bindgen::prelude::*;
 
 #[derive(Debug)]
@@ -41,6 +44,7 @@ impl std::fmt::Display for MyError {
     }
 }
 
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
 #[derive(Debug, Clone, Copy)]
 pub enum Rules {
     Classic,
@@ -53,6 +57,7 @@ impl Default for Rules {
     }
 }
 
+#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
 #[derive(Debug, Clone, Copy)]
 pub enum Algorithm {
     CactusKev,