1 unstable release
0.1.0 | Feb 9, 2024 |
---|
#1403 in Encoding
133 downloads per month
19KB
364 lines
Serde support for Duration and chrono::Duration
Installation
Add the following to your Cargo.toml:
[dependencies]
serde_duration_ext = "0.1.0"
Also you can enable the chrono
feature to support chrono::Duration
[dependencies]
serde_duration_ext = { version = "0.1.0", features = ["chrono"] }
Usage
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.
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
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);
}
Dependencies
~2.2–3.5MB
~65K SLoC