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 DeserializePiecewiseDefault;