1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//! Uses serde's `Option<T>` handling to let you easily specify defaults for all fields at once
//! by implementing `Default`.
//!
//! # Panics
//!
//! Will panic at compile time if you use `#[derive(DeserializePiecewiseDefault)]` on a struct
//! with unnamed fields, a struct that does not implement `Default`, or an enum.
//!
//! # Examples
//!
//! ```
//! use serde::Deserialize;
//! use serde_piecewise_default::DeserializePiecewiseDefault;
//!
//! #[derive(DeserializePiecewiseDefault, PartialEq, Eq, Debug)]
//! struct Example {
//!     value: u8,
//!     enabled: bool,
//! }
//!
//! impl Default for Example {
//!     fn default() -> Self {
//!         Example {
//!             value: 20,
//!             enabled: true,
//!         }
//!     }
//! }
//!
//! let data: Example = serde_json::from_str(r#"{"value": 8}"#).unwrap();
//! assert_eq!(data, Example { value: 8, enabled: true });
//! let data: Example = serde_json::from_str(r#"{"enabled": false}"#).unwrap();
//! assert_eq!(data, Example { value: 20, enabled: false });
//! let data: Example = serde_json::from_str("{}").unwrap();
//! assert_eq!(data, Example { value: 20, enabled: true });
//! ```

extern crate serde;
extern crate serde_piecewise_default_derive;

pub use serde_piecewise_default_derive::DeserializePiecewiseDefault;