# Serde support for Duration and chrono::Duration ## Installation Add the following to your Cargo.toml: ```toml [dependencies] serde_duration_ext = "0.1.0" ``` Also you can enable the `chrono` feature to support chrono::Duration ```toml [dependencies] serde_duration_ext = { version = "0.1.0", features = ["chrono"] } ``` ## Usage ```rust use serde::{Serialize, Deserialize}; use serde_json; #[derive(Serialize, Deserialize, Debug, PartialEq)] struct Foo { #[serde(with = "serde_duration_ext")] duration: std::time::Duration, } fn main() { let foo = Foo { duration: std::time::Duration::from_secs(123), }; let json = serde_json::to_string(&foo).unwrap(); assert_eq!(json, r#"{"duration":"123s"}"#); let foo2: Foo = serde_json::from_str(&json).unwrap(); assert_eq!(foo, foo2); } ``` You can also use `chrono::Duration` if you enable the `chrono` feature. ```rust use serde::{Serialize, Deserialize}; use serde_json; #[derive(Serialize, Deserialize, Debug, PartialEq)] struct Foo { #[serde(with = "serde_duration_ext::chrono")] duration: chrono::Duration, } fn main() { let foo = Foo { duration: chrono::Duration::seconds(123), }; let json = serde_json::to_string(&foo).unwrap(); assert_eq!(json, r#"{"duration":"123s"}"#); let foo2: Foo = serde_json::from_str(&json).unwrap(); assert_eq!(foo, foo2); } ``` Library also provides useful types such as `DurationUnit` and `TimeUnit` ```rust use serde::{Serialize, Deserialize}; use serde_json; use serde_duration_ext::DurationUnit; #[derive(Serialize, Deserialize, Debug, PartialEq)] struct Foo { duration: DurationUnit, } fn main() { let foo = Foo { duration: DurationUnit::from_secs(123), }; let json = serde_json::to_string(&foo).unwrap(); assert_eq!(json, r#"{"duration":"123s"}"#); let foo2: Foo = serde_json::from_str(&json).unwrap(); assert_eq!(foo, foo2); } ```