serde_piecewise_default 0.2.0

Uses serde's Option<T> handling to let you easily specify defaults for all fields at once by implementing Default.
Documentation
use serde_piecewise_default::*;
use serde::Deserialize;

extern crate serde_json;

#[derive(DeserializePiecewiseDefault)]
struct Example {
    data1: u8,
    data2: bool,
    data3: String,
}

impl Default for Example {
    fn default() -> Self {
        Example {
            data1: 7,
            data2: false,
            data3: "Hello".to_owned()
        }
    }
}

#[test]
fn full() {
    let data = r#"
        {
            "data1": 8,
            "data2": true,
            "data3": "Howdy"
        }
    "#;
    let data: Example = serde_json::from_str(data).unwrap();
    assert_eq!(8, data.data1);
    assert_eq!(true, data.data2);
    assert_eq!("Howdy", data.data3);
}

#[test]
fn partial() {
    let data = r#"
        {
            "data3": "Ahoy"
        }
    "#;
    let data: Example = serde_json::from_str(data).unwrap();
    assert_eq!(7, data.data1);
    assert_eq!(false, data.data2);
    assert_eq!("Ahoy", data.data3);
}

#[test]
fn empty() {
    let data = "{}";
    let data: Example = serde_json::from_str(data).unwrap();
    assert_eq!(7, data.data1);
    assert_eq!(false, data.data2);
    assert_eq!("Hello", data.data3);
}