From 91ab3e93c440e063a3ccae5ee1557a2c80d89abf Mon Sep 17 00:00:00 2001 From: Samuele Maci Date: Sun, 2 Dec 2018 00:08:34 +0100 Subject: [PATCH] Add Default implementation for Value --- src/value/mod.rs | 41 +++++++++++++++++++++++++++++++++++++++++ tests/test_serde.rs | 5 +++++ 2 files changed, 46 insertions(+) diff --git a/src/value/mod.rs b/src/value/mod.rs index 147d8f00..95e164d8 100644 --- a/src/value/mod.rs +++ b/src/value/mod.rs @@ -40,6 +40,47 @@ pub enum Value { Mapping(Mapping), } +/// The default value is `Value::Null`. +/// +/// This is useful for handling omitted `Value` fields when deserializing. +/// +/// # Examples +/// +/// ```rust +/// # #[macro_use] +/// # extern crate serde_derive; +/// # +/// # extern crate serde_yaml; +/// # +/// use serde_yaml::Value; +/// +/// #[derive(Deserialize)] +/// struct Settings { +/// level: i32, +/// #[serde(default)] +/// extras: Value, +/// } +/// +/// # fn try_main() -> Result<(), serde_yaml::Error> { +/// let data = r#" { "level": 42 } "#; +/// let s: Settings = serde_yaml::from_str(data)?; +/// +/// assert_eq!(s.level, 42); +/// assert_eq!(s.extras, Value::Null); +/// # +/// # Ok(()) +/// # } +/// # +/// # fn main() { +/// # try_main().unwrap() +/// # } +/// ``` +impl Default for Value { + fn default() -> Value { + Value::Null + } +} + /// A YAML sequence in which the elements are `serde_yaml::Value`. pub type Sequence = Vec; diff --git a/tests/test_serde.rs b/tests/test_serde.rs index 81fee70e..6991edea 100644 --- a/tests/test_serde.rs +++ b/tests/test_serde.rs @@ -49,6 +49,11 @@ where serde_yaml::from_str::(yaml).unwrap(); } +#[test] +fn test_default() { + assert_eq!(Value::default(), Value::Null); +} + #[test] fn test_int() { let thing = 256;