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,