diff --git a/src/format/parse.rs b/src/format/parse.rs index 5256829..89c8e81 100644 --- a/src/format/parse.rs +++ b/src/format/parse.rs @@ -358,9 +358,11 @@ fn test_parse() { ($fmt:expr, $items:expr; $err:tt) => ( assert_eq!(parse_all($fmt, &$items), Err($err)) ); - ($fmt:expr, $items:expr; $($k:ident: $v:expr),*) => ( - assert_eq!(parse_all($fmt, &$items), Ok(Parsed { $($k: Some($v),)* ..Parsed::new() })) - ); + ($fmt:expr, $items:expr; $($k:ident: $v:expr),*) => (#[allow(unused_mut)] { + let mut expected = Parsed::new(); + $(expected.$k = Some($v);)* + assert_eq!(parse_all($fmt, &$items), Ok(expected)) + }); } // empty string diff --git a/src/format/parsed.rs b/src/format/parsed.rs index 0cfe72f..423f19f 100644 --- a/src/format/parsed.rs +++ b/src/format/parsed.rs @@ -108,6 +108,9 @@ pub struct Parsed { /// Offset from the local time to UTC, in seconds. pub offset: Option, + + /// A dummy field to make this type not fully destructible (required for API stability). + _dummy: (), } /// Checks if `old` is either empty or has the same value to `new` (i.e. "consistent"), @@ -121,14 +124,23 @@ fn set_if_consistent(old: &mut Option, new: T) -> ParseResult<( } } +impl Default for Parsed { + fn default() -> Parsed { + Parsed { + year: None, year_div_100: None, year_mod_100: None, isoyear: None, + isoyear_div_100: None, isoyear_mod_100: None, month: None, + week_from_sun: None, week_from_mon: None, isoweek: None, weekday: None, + ordinal: None, day: None, hour_div_12: None, hour_mod_12: None, minute: None, + second: None, nanosecond: None, timestamp: None, offset: None, + _dummy: (), + } + } +} + impl Parsed { /// Returns the initial value of parsed parts. pub fn new() -> Parsed { - Parsed { year: None, year_div_100: None, year_mod_100: None, isoyear: None, - isoyear_div_100: None, isoyear_mod_100: None, month: None, - week_from_sun: None, week_from_mon: None, isoweek: None, weekday: None, - ordinal: None, day: None, hour_div_12: None, hour_mod_12: None, minute: None, - second: None, nanosecond: None, timestamp: None, offset: None } + Parsed::default() } /// Tries to set the [`year`](#structfield.year) field from given value.