serde_nanos/lib.rs
1//! # Serde Nanos
2//!
3//! [Documentation](https://docs.rs/serde_nanos) |
4//! [Github](https://github.com/caspervonb/serde_nanos) |
5//! [Crate](https://crates.io/crates/serde_nanos)
6//!
7//! A serde wrapper that can be used to serialize timestamps and durations as
8//! nanoseconds.
9//!
10//! It's often useful together with `serde_json` to communicate with JSON
11//! protocols.
12#![warn(missing_docs)]
13#![warn(missing_debug_implementations)]
14
15mod de;
16mod ser;
17
18pub use crate::de::Deserialize;
19pub use crate::ser::Serialize;
20
21use serde::Deserializer;
22use serde::Serializer;
23
24/// Serde `serialize_with` function to serialize time values as nanoseconds.
25///
26/// This function can be used with either of the following Serde attributes:
27///
28/// - `#[serde(with = "serde_nanos")]`
29/// - `#[serde(serialize_with = "serde_nanos::serialize")]`
30///
31/// ```
32/// # use serde_derive::Serialize;
33/// use std::time::Duration;
34/// use serde::Serialize;
35///
36/// #[derive(Serialize)]
37/// struct Message {
38/// #[serde(with = "serde_nanos")]
39/// expires_in: Duration,
40/// }
41/// ```
42pub fn serialize<T, S>(nanos: &T, serializer: S) -> Result<S::Ok, S::Error>
43where
44 T: ?Sized + Serialize,
45 S: Serializer,
46{
47 Serialize::serialize(nanos, serializer)
48}
49
50/// Serde `deserialize_with` function to deserialize time values as nanoseconds.
51///
52/// This function can be used with either of the following Serde attributes:
53///
54/// - `#[serde(with = "serde_nanos")]`
55/// - `#[serde(deserialize_with = "serde_nanos::deserialize")]`
56///
57/// ```
58/// # use serde_derive::Deserialize;
59/// use std::time::Duration;
60/// use serde::Deserialize;
61///
62/// #[derive(Deserialize)]
63/// struct Message {
64/// #[serde(with = "serde_nanos")]
65/// expires_in: Duration,
66/// }
67/// ```
68pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
69where
70 T: Deserialize<'de>,
71 D: Deserializer<'de>,
72{
73 Deserialize::deserialize(deserializer)
74}