diff --git a/Cargo.lock b/Cargo.lock index ecef3a6..75c984d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -50,6 +50,7 @@ dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", + "serde", "windows-targets", ] @@ -141,6 +142,27 @@ name = "r701" version = "0.1.0" dependencies = [ "chrono", + "serde", +] + +[[package]] +name = "serde" +version = "1.0.200" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ddc6f9cc94d67c0e21aaf7eda3a010fd3af78ebf6e096aa6e2e13c79749cce4f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.200" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "856f046b9400cee3c8c94ed572ecdb752444c24528c035cd35882aad6f492bcb" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index fb322da..f1d3408 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,3 +7,7 @@ edition = "2021" [dependencies] chrono = { version = "0.4.38", default-features = false, features = ["clock"] } +serde = { version = "1.0.200", default-features = false, features = ["derive"], optional = true } + +[features] +serde = ["chrono/serde", "dep:serde"] diff --git a/src/record.rs b/src/record.rs index df8bd8b..79ae136 100644 --- a/src/record.rs +++ b/src/record.rs @@ -1,6 +1,9 @@ +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use chrono::{DateTime, Local, TimeZone}; #[derive(Debug, Clone, Copy, Default, Eq, PartialEq, Ord, PartialOrd, Hash)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub enum Clock { #[default] FirstIn, @@ -13,6 +16,7 @@ unsafe impl Send for Clock {} unsafe impl Sync for Clock {} #[derive(Debug, Clone, Copy, Default, Eq, PartialEq, Ord, PartialOrd, Hash)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Record { pub employee_id: u32, pub clock: Clock,