diff --git a/src/date.rs b/src/date.rs index dae586f9d..bbb42dfb3 100644 --- a/src/date.rs +++ b/src/date.rs @@ -267,9 +267,9 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).year(), 2019); - /// assert_eq!(Date::from_ymd(2019, 12, 31).year(), 2019); - /// assert_eq!(Date::from_ymd(2020, 1, 1).year(), 2020); + /// assert_eq!(Date::try_from_ymd(2019, 1, 1).unwrap().year(), 2019); + /// assert_eq!(Date::try_from_ymd(2019, 12, 31).unwrap().year(), 2019); + /// assert_eq!(Date::try_from_ymd(2020, 1, 1).unwrap().year(), 2020); /// ``` #[inline(always)] #[allow(clippy::missing_const_for_fn)] @@ -284,8 +284,8 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).month(), 1); - /// assert_eq!(Date::from_ymd(2019, 12, 31).month(), 12); + /// assert_eq!(Date::try_from_ymd(2019, 1, 1).unwrap().month(), 1); + /// assert_eq!(Date::try_from_ymd(2019, 12, 31).unwrap().month(), 12); /// ``` #[inline(always)] pub fn month(self) -> u8 { @@ -299,8 +299,8 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).day(), 1); - /// assert_eq!(Date::from_ymd(2019, 12, 31).day(), 31); + /// assert_eq!(Date::try_from_ymd(2019, 1, 1).unwrap().day(), 1); + /// assert_eq!(Date::try_from_ymd(2019, 12, 31).unwrap().day(), 31); /// ``` #[inline(always)] pub fn day(self) -> u8 { @@ -315,8 +315,11 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).month_day(), (1, 1)); - /// assert_eq!(Date::from_ymd(2019, 12, 31).month_day(), (12, 31)); + /// assert_eq!(Date::try_from_ymd(2019, 1, 1).unwrap().month_day(), (1, 1)); + /// assert_eq!( + /// Date::try_from_ymd(2019, 12, 31).unwrap().month_day(), + /// (12, 31) + /// ); /// ``` // TODO Refactor to prove to the compiler that this can't panic. #[inline] @@ -343,8 +346,8 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).ordinal(), 1); - /// assert_eq!(Date::from_ymd(2019, 12, 31).ordinal(), 365); + /// assert_eq!(Date::try_from_ymd(2019, 1, 1).unwrap().ordinal(), 1); + /// assert_eq!(Date::try_from_ymd(2019, 12, 31).unwrap().ordinal(), 365); /// ``` #[inline(always)] #[allow(clippy::missing_const_for_fn)] @@ -356,11 +359,26 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).iso_year_week(), (2019, 1)); - /// assert_eq!(Date::from_ymd(2019, 10, 4).iso_year_week(), (2019, 40)); - /// assert_eq!(Date::from_ymd(2020, 1, 1).iso_year_week(), (2020, 1)); - /// assert_eq!(Date::from_ymd(2020, 12, 31).iso_year_week(), (2020, 53)); - /// assert_eq!(Date::from_ymd(2021, 1, 1).iso_year_week(), (2020, 53)); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1).unwrap().iso_year_week(), + /// (2019, 1) + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 10, 4).unwrap().iso_year_week(), + /// (2019, 40) + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2020, 1, 1).unwrap().iso_year_week(), + /// (2020, 1) + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2020, 12, 31).unwrap().iso_year_week(), + /// (2020, 53) + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2021, 1, 1).unwrap().iso_year_week(), + /// (2020, 53) + /// ); /// ``` #[inline] pub fn iso_year_week(self) -> (i32, u8) { @@ -381,11 +399,11 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).week(), 1); - /// assert_eq!(Date::from_ymd(2019, 10, 4).week(), 40); - /// assert_eq!(Date::from_ymd(2020, 1, 1).week(), 1); - /// assert_eq!(Date::from_ymd(2020, 12, 31).week(), 53); - /// assert_eq!(Date::from_ymd(2021, 1, 1).week(), 53); + /// assert_eq!(Date::try_from_ymd(2019, 1, 1).unwrap().week(), 1); + /// assert_eq!(Date::try_from_ymd(2019, 10, 4).unwrap().week(), 40); + /// assert_eq!(Date::try_from_ymd(2020, 1, 1).unwrap().week(), 1); + /// assert_eq!(Date::try_from_ymd(2020, 12, 31).unwrap().week(), 53); + /// assert_eq!(Date::try_from_ymd(2021, 1, 1).unwrap().week(), 53); /// ``` #[inline(always)] pub fn week(self) -> u8 { @@ -398,10 +416,24 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).sunday_based_week(), 0); - /// assert_eq!(Date::from_ymd(2020, 1, 1).sunday_based_week(), 0); - /// assert_eq!(Date::from_ymd(2020, 12, 31).sunday_based_week(), 52); - /// assert_eq!(Date::from_ymd(2021, 1, 1).sunday_based_week(), 0); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1).unwrap().sunday_based_week(), + /// 0 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2020, 1, 1).unwrap().sunday_based_week(), + /// 0 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2020, 12, 31) + /// .unwrap() + /// .sunday_based_week(), + /// 52 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2021, 1, 1).unwrap().sunday_based_week(), + /// 0 + /// ); /// ``` #[inline] #[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] @@ -415,10 +447,24 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).monday_based_week(), 0); - /// assert_eq!(Date::from_ymd(2020, 1, 1).monday_based_week(), 0); - /// assert_eq!(Date::from_ymd(2020, 12, 31).monday_based_week(), 52); - /// assert_eq!(Date::from_ymd(2021, 1, 1).monday_based_week(), 0); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1).unwrap().monday_based_week(), + /// 0 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2020, 1, 1).unwrap().monday_based_week(), + /// 0 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2020, 12, 31) + /// .unwrap() + /// .monday_based_week(), + /// 52 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2021, 1, 1).unwrap().monday_based_week(), + /// 0 + /// ); /// ``` #[inline] #[allow(clippy::cast_possible_truncation, clippy::cast_sign_loss)] @@ -430,7 +476,10 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).as_ymd(), (2019, 1, 1)); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1).unwrap().as_ymd(), + /// (2019, 1, 1) + /// ); /// ``` #[inline(always)] pub fn as_ymd(self) -> (i32, u8, u8) { @@ -442,7 +491,7 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).as_yo(), (2019, 1)); + /// assert_eq!(Date::try_from_ymd(2019, 1, 1).unwrap().as_yo(), (2019, 1)); /// ``` #[inline(always)] #[allow(clippy::missing_const_for_fn)] @@ -457,18 +506,18 @@ impl Date { /// /// ```rust /// # use time::{Date, Weekday::*}; - /// assert_eq!(Date::from_ymd(2019, 1, 1).weekday(), Tuesday); - /// assert_eq!(Date::from_ymd(2019, 2, 1).weekday(), Friday); - /// assert_eq!(Date::from_ymd(2019, 3, 1).weekday(), Friday); - /// assert_eq!(Date::from_ymd(2019, 4, 1).weekday(), Monday); - /// assert_eq!(Date::from_ymd(2019, 5, 1).weekday(), Wednesday); - /// assert_eq!(Date::from_ymd(2019, 6, 1).weekday(), Saturday); - /// assert_eq!(Date::from_ymd(2019, 7, 1).weekday(), Monday); - /// assert_eq!(Date::from_ymd(2019, 8, 1).weekday(), Thursday); - /// assert_eq!(Date::from_ymd(2019, 9, 1).weekday(), Sunday); - /// assert_eq!(Date::from_ymd(2019, 10, 1).weekday(), Tuesday); - /// assert_eq!(Date::from_ymd(2019, 11, 1).weekday(), Friday); - /// assert_eq!(Date::from_ymd(2019, 12, 1).weekday(), Sunday); + /// assert_eq!(Date::try_from_ymd(2019, 1, 1).unwrap().weekday(), Tuesday); + /// assert_eq!(Date::try_from_ymd(2019, 2, 1).unwrap().weekday(), Friday); + /// assert_eq!(Date::try_from_ymd(2019, 3, 1).unwrap().weekday(), Friday); + /// assert_eq!(Date::try_from_ymd(2019, 4, 1).unwrap().weekday(), Monday); + /// assert_eq!(Date::try_from_ymd(2019, 5, 1).unwrap().weekday(), Wednesday); + /// assert_eq!(Date::try_from_ymd(2019, 6, 1).unwrap().weekday(), Saturday); + /// assert_eq!(Date::try_from_ymd(2019, 7, 1).unwrap().weekday(), Monday); + /// assert_eq!(Date::try_from_ymd(2019, 8, 1).unwrap().weekday(), Thursday); + /// assert_eq!(Date::try_from_ymd(2019, 9, 1).unwrap().weekday(), Sunday); + /// assert_eq!(Date::try_from_ymd(2019, 10, 1).unwrap().weekday(), Tuesday); + /// assert_eq!(Date::try_from_ymd(2019, 11, 1).unwrap().weekday(), Friday); + /// assert_eq!(Date::try_from_ymd(2019, 12, 1).unwrap().weekday(), Sunday); /// ``` #[inline] pub fn weekday(self) -> Weekday { @@ -503,16 +552,16 @@ impl Date { /// ```rust /// # use time::Date; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1).next_day(), - /// Date::from_ymd(2019, 1, 2) + /// Date::try_from_ymd(2019, 1, 1).unwrap().next_day(), + /// Date::try_from_ymd(2019, 1, 2).unwrap() /// ); /// assert_eq!( - /// Date::from_ymd(2019, 1, 31).next_day(), - /// Date::from_ymd(2019, 2, 1) + /// Date::try_from_ymd(2019, 1, 31).unwrap().next_day(), + /// Date::try_from_ymd(2019, 2, 1).unwrap() /// ); /// assert_eq!( - /// Date::from_ymd(2019, 12, 31).next_day(), - /// Date::from_ymd(2020, 1, 1) + /// Date::try_from_ymd(2019, 12, 31).unwrap().next_day(), + /// Date::try_from_ymd(2020, 1, 1).unwrap() /// ); /// ``` #[inline(always)] @@ -532,16 +581,16 @@ impl Date { /// ```rust /// # use time::Date; /// assert_eq!( - /// Date::from_ymd(2019, 1, 2).previous_day(), - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 2).unwrap().previous_day(), + /// Date::try_from_ymd(2019, 1, 1).unwrap() /// ); /// assert_eq!( - /// Date::from_ymd(2019, 2, 1).previous_day(), - /// Date::from_ymd(2019, 1, 31) + /// Date::try_from_ymd(2019, 2, 1).unwrap().previous_day(), + /// Date::try_from_ymd(2019, 1, 31).unwrap() /// ); /// assert_eq!( - /// Date::from_ymd(2020, 1, 1).previous_day(), - /// Date::from_ymd(2019, 12, 31) + /// Date::try_from_ymd(2020, 1, 1).unwrap().previous_day(), + /// Date::try_from_ymd(2019, 12, 31).unwrap() /// ); /// ``` #[inline(always)] @@ -560,10 +609,19 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(-4713, 11, 24).julian_day(), 0); - /// assert_eq!(Date::from_ymd(2000, 1, 1).julian_day(), 2_451_545); - /// assert_eq!(Date::from_ymd(2019, 1, 1).julian_day(), 2_458_485); - /// assert_eq!(Date::from_ymd(2019, 12, 31).julian_day(), 2_458_849); + /// assert_eq!(Date::try_from_ymd(-4713, 11, 24).unwrap().julian_day(), 0); + /// assert_eq!( + /// Date::try_from_ymd(2000, 1, 1).unwrap().julian_day(), + /// 2_451_545 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1).unwrap().julian_day(), + /// 2_458_485 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 12, 31).unwrap().julian_day(), + /// 2_458_849 + /// ); /// ``` #[inline] pub fn julian_day(self) -> i64 { @@ -586,12 +644,21 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_julian_day(0), Date::from_ymd(-4713, 11, 24)); - /// assert_eq!(Date::from_julian_day(2_451_545), Date::from_ymd(2000, 1, 1)); - /// assert_eq!(Date::from_julian_day(2_458_485), Date::from_ymd(2019, 1, 1)); + /// assert_eq!( + /// Date::from_julian_day(0), + /// Date::try_from_ymd(-4713, 11, 24).unwrap() + /// ); + /// assert_eq!( + /// Date::from_julian_day(2_451_545), + /// Date::try_from_ymd(2000, 1, 1).unwrap() + /// ); + /// assert_eq!( + /// Date::from_julian_day(2_458_485), + /// Date::try_from_ymd(2019, 1, 1).unwrap() + /// ); /// assert_eq!( /// Date::from_julian_day(2_458_849), - /// Date::from_ymd(2019, 12, 31) + /// Date::try_from_ymd(2019, 12, 31).unwrap() /// ); /// ``` #[inline] @@ -632,7 +699,7 @@ impl Date { /// ```rust /// # use time::{Date, PrimitiveDateTime, Time}; /// assert_eq!( - /// Date::from_ymd(1970, 1, 1).midnight(), + /// Date::try_from_ymd(1970, 1, 1).unwrap().midnight(), /// PrimitiveDateTime::unix_epoch() /// ); /// ``` @@ -646,8 +713,10 @@ impl Date { /// ```rust /// # use time::{Date, Time}; /// assert_eq!( - /// Date::from_ymd(1970, 1, 1).with_time(Time::from_hms(0, 0, 0)), - /// Date::from_ymd(1970, 1, 1).midnight(), + /// Date::try_from_ymd(1970, 1, 1) + /// .unwrap() + /// .with_time(Time::try_from_hms(0, 0, 0).unwrap()), + /// Date::try_from_ymd(1970, 1, 1).unwrap().midnight(), /// ); /// ``` #[inline(always)] @@ -675,8 +744,14 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert!(Date::from_ymd(1970, 1, 1).try_with_hms(0, 0, 0).is_ok()); - /// assert!(Date::from_ymd(1970, 1, 1).try_with_hms(24, 0, 0).is_err()); + /// assert!(Date::try_from_ymd(1970, 1, 1) + /// .unwrap() + /// .try_with_hms(0, 0, 0) + /// .is_ok()); + /// assert!(Date::try_from_ymd(1970, 1, 1) + /// .unwrap() + /// .try_with_hms(24, 0, 0) + /// .is_err()); /// ``` #[inline(always)] pub fn try_with_hms( @@ -720,10 +795,12 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert!(Date::from_ymd(1970, 1, 1) + /// assert!(Date::try_from_ymd(1970, 1, 1) + /// .unwrap() /// .try_with_hms_milli(0, 0, 0, 0) /// .is_ok()); - /// assert!(Date::from_ymd(1970, 1, 1) + /// assert!(Date::try_from_ymd(1970, 1, 1) + /// .unwrap() /// .try_with_hms_milli(24, 0, 0, 0) /// .is_err()); /// ``` @@ -770,10 +847,12 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert!(Date::from_ymd(1970, 1, 1) + /// assert!(Date::try_from_ymd(1970, 1, 1) + /// .unwrap() /// .try_with_hms_micro(0, 0, 0, 0) /// .is_ok()); - /// assert!(Date::from_ymd(1970, 1, 1) + /// assert!(Date::try_from_ymd(1970, 1, 1) + /// .unwrap() /// .try_with_hms_micro(24, 0, 0, 0) /// .is_err()); /// ``` @@ -817,10 +896,12 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert!(Date::from_ymd(1970, 1, 1) + /// assert!(Date::try_from_ymd(1970, 1, 1) + /// .unwrap() /// .try_with_hms_nano(0, 0, 0, 0) /// .is_ok()); - /// assert!(Date::from_ymd(1970, 1, 1) + /// assert!(Date::try_from_ymd(1970, 1, 1) + /// .unwrap() /// .try_with_hms_nano(24, 0, 0, 0) /// .is_err()); /// ``` @@ -845,7 +926,10 @@ impl Date { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 2).format("%Y-%m-%d"), "2019-01-02"); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 2).unwrap().format("%Y-%m-%d"), + /// "2019-01-02" + /// ); /// ``` #[inline(always)] pub fn format(self, format: &str) -> String { @@ -864,12 +948,15 @@ impl Date { /// # use time::{Date, Weekday::Wednesday}; /// assert_eq!( /// Date::parse("2019-01-02", "%F"), - /// Ok(Date::from_ymd(2019, 1, 2)) + /// Ok(Date::try_from_ymd(2019, 1, 2).unwrap()) + /// ); + /// assert_eq!( + /// Date::parse("2019-002", "%Y-%j"), + /// Ok(Date::try_from_yo(2019, 2).unwrap()) /// ); - /// assert_eq!(Date::parse("2019-002", "%Y-%j"), Ok(Date::from_yo(2019, 2))); /// assert_eq!( /// Date::parse("2019-W01-3", "%G-W%V-%u"), - /// Ok(Date::from_iso_ywd(2019, 1, Wednesday)) + /// Ok(Date::try_from_iso_ywd(2019, 1, Wednesday).unwrap()) /// ); /// ``` #[inline(always)] @@ -1025,25 +1112,26 @@ impl Ord for Date { } #[cfg(test)] +#[allow(clippy::result_unwrap_used)] mod test { use super::*; use crate::prelude::*; macro_rules! yo { ($year:literal, $ordinal:literal) => { - Date::from_yo($year, $ordinal) + Date::try_from_yo($year, $ordinal).unwrap() }; } macro_rules! ymd { ($year:literal, $month:literal, $day:literal) => { - Date::from_ymd($year, $month, $day) + Date::try_from_ymd($year, $month, $day).unwrap() }; } macro_rules! ywd { ($year:literal, $week:literal, $day:ident) => { - Date::from_iso_ywd($year, $week, $day) + Date::try_from_iso_ywd($year, $week, $day).unwrap() }; } @@ -1119,7 +1207,10 @@ mod test { fn test_monday_based_week() { macro_rules! assert_monday_week { ($y:literal - $m:literal - $d:literal => $week:literal) => { - assert_eq!(Date::from_ymd($y, $m, $d).monday_based_week(), $week); + assert_eq!( + Date::try_from_ymd($y, $m, $d).unwrap().monday_based_week(), + $week + ); }; } @@ -1318,7 +1409,10 @@ mod test { fn test_sunday_based_week() { macro_rules! assert_sunday_week { ($y:literal - $m:literal - $d:literal => $week:literal) => { - assert_eq!(Date::from_ymd($y, $m, $d).sunday_based_week(), $week); + assert_eq!( + Date::try_from_ymd($y, $m, $d).unwrap().sunday_based_week(), + $week + ); }; } @@ -1528,7 +1622,7 @@ mod test { ), "%a %W %Y" ), - Ok(Date::from_yo($year, $ordinal)) + Ok(Date::try_from_yo($year, $ordinal).unwrap()) ); }; } @@ -1739,7 +1833,7 @@ mod test { ), "%a %U %Y" ), - Ok(Date::from_yo($year, $ordinal)) + Ok(Date::try_from_yo($year, $ordinal).unwrap()) ); }; } @@ -2049,12 +2143,13 @@ mod test { #[test] fn with_time() { assert_eq!( - ymd!(1970, 1, 1).with_time(Time::from_hms(0, 0, 0)), - ymd!(1970, 1, 1).with_hms(0, 0, 0), + ymd!(1970, 1, 1).with_time(Time::try_from_hms(0, 0, 0).unwrap()), + ymd!(1970, 1, 1).try_with_hms(0, 0, 0).unwrap(), ); } #[test] + #[cfg(feature = "panicking-api")] fn with_hms() { assert_eq!( ymd!(1970, 1, 1).with_hms(0, 0, 0), @@ -2066,12 +2161,13 @@ mod test { fn try_with_hms() { assert_eq!( ymd!(1970, 1, 1).try_with_hms(0, 0, 0), - Ok(ymd!(1970, 1, 1).with_time(Time::from_hms(0, 0, 0))), + Ok(ymd!(1970, 1, 1).with_time(Time::try_from_hms(0, 0, 0).unwrap())), ); assert!(ymd!(1970, 1, 1).try_with_hms(24, 0, 0).is_err()); } #[test] + #[cfg(feature = "panicking-api")] fn with_hms_milli() { assert_eq!( ymd!(1970, 1, 1).with_hms_milli(0, 0, 0, 0), @@ -2083,12 +2179,13 @@ mod test { fn try_with_hms_milli() { assert_eq!( ymd!(1970, 1, 1).try_with_hms_milli(0, 0, 0, 0), - Ok(ymd!(1970, 1, 1).with_time(Time::from_hms_milli(0, 0, 0, 0))), + Ok(ymd!(1970, 1, 1).with_time(Time::try_from_hms_milli(0, 0, 0, 0).unwrap())), ); assert!(ymd!(1970, 1, 1).try_with_hms_milli(24, 0, 0, 0).is_err()); } #[test] + #[cfg(feature = "panicking-api")] fn with_hms_micro() { assert_eq!( ymd!(1970, 1, 1).with_hms_micro(0, 0, 0, 0), @@ -2100,12 +2197,13 @@ mod test { fn try_with_hms_micro() { assert_eq!( ymd!(1970, 1, 1).try_with_hms_micro(0, 0, 0, 0), - Ok(ymd!(1970, 1, 1).with_time(Time::from_hms_micro(0, 0, 0, 0))), + Ok(ymd!(1970, 1, 1).with_time(Time::try_from_hms_micro(0, 0, 0, 0).unwrap())), ); assert!(ymd!(1970, 1, 1).try_with_hms_micro(24, 0, 0, 0).is_err()); } #[test] + #[cfg(feature = "panicking-api")] fn with_hms_nano() { assert_eq!( ymd!(1970, 1, 1).with_hms_nano(0, 0, 0, 0), @@ -2117,7 +2215,7 @@ mod test { fn try_with_hms_nano() { assert_eq!( ymd!(1970, 1, 1).try_with_hms_nano(0, 0, 0, 0), - Ok(ymd!(1970, 1, 1).with_time(Time::from_hms_nano(0, 0, 0, 0))), + Ok(ymd!(1970, 1, 1).with_time(Time::try_from_hms_nano(0, 0, 0, 0).unwrap())), ); assert!(ymd!(1970, 1, 1).try_with_hms_nano(24, 0, 0, 0).is_err()); } diff --git a/src/offset_date_time.rs b/src/offset_date_time.rs index e94946a1e..b87482ec7 100644 --- a/src/offset_date_time.rs +++ b/src/offset_date_time.rs @@ -52,7 +52,8 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, OffsetDateTime, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2000, 1, 1) + /// Date::try_from_ymd(2000, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .to_offset(UtcOffset::hours(-1)) @@ -71,7 +72,8 @@ impl OffsetDateTime { /// # use time::{Date, OffsetDateTime, UtcOffset}; /// assert_eq!( /// OffsetDateTime::unix_epoch(), - /// Date::from_ymd(1970, 1, 1) + /// Date::try_from_ymd(1970, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC), /// ); @@ -91,7 +93,8 @@ impl OffsetDateTime { /// ); /// assert_eq!( /// OffsetDateTime::from_unix_timestamp(1_546_300_800), - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC), /// ); @@ -106,15 +109,19 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms(0, 0, 0) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(0, 0, 0) + /// .unwrap() /// .using_offset(UtcOffset::UTC) /// .offset(), /// UtcOffset::UTC, /// ); /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms(0, 0, 0) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(0, 0, 0) + /// .unwrap() /// .using_offset(UtcOffset::hours(1)) /// .offset(), /// UtcOffset::hours(1), @@ -152,18 +159,20 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .date(), - /// Date::from_ymd(2019, 1, 1), + /// Date::try_from_ymd(2019, 1, 1).unwrap(), /// ); /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::hours(-1)) /// .date(), - /// Date::from_ymd(2018, 12, 31), + /// Date::try_from_ymd(2018, 12, 31).unwrap(), /// ); /// ``` #[inline(always)] @@ -176,18 +185,20 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, Time, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .time(), - /// Time::from_hms(0, 0, 0), + /// Time::try_from_hms(0, 0, 0).unwrap(), /// ); /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::hours(-1)) /// .time(), - /// Time::from_hms(23, 0, 0), + /// Time::try_from_hms(23, 0, 0).unwrap(), /// ); /// ``` #[inline(always)] @@ -200,22 +211,26 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .year(), /// 2019, /// ); /// assert_eq!( - /// Date::from_ymd(2019, 12, 31) - /// .with_hms(23, 0, 0) + /// Date::try_from_ymd(2019, 12, 31) + /// .unwrap() + /// .try_with_hms(23, 0, 0) + /// .unwrap() /// .using_offset(UtcOffset::UTC) /// .to_offset(UtcOffset::hours(1)) /// .year(), /// 2020, /// ); /// assert_eq!( - /// Date::from_ymd(2020, 1, 1) + /// Date::try_from_ymd(2020, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .year(), @@ -236,15 +251,18 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .month(), /// 1, /// ); /// assert_eq!( - /// Date::from_ymd(2019, 12, 31) - /// .with_hms(23, 0, 0) + /// Date::try_from_ymd(2019, 12, 31) + /// .unwrap() + /// .try_with_hms(23, 0, 0) + /// .unwrap() /// .using_offset(UtcOffset::hours(1)) /// .month(), /// 1, @@ -263,15 +281,18 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .day(), /// 1, /// ); /// assert_eq!( - /// Date::from_ymd(2019, 12, 31) - /// .with_hms(23, 0, 0) + /// Date::try_from_ymd(2019, 12, 31) + /// .unwrap() + /// .try_with_hms(23, 0, 0) + /// .unwrap() /// .using_offset(UtcOffset::hours(1)) /// .day(), /// 1, @@ -290,15 +311,18 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .month_day(), /// (1, 1), /// ); /// assert_eq!( - /// Date::from_ymd(2019, 12, 31) - /// .with_hms(23, 0, 0) + /// Date::try_from_ymd(2019, 12, 31) + /// .unwrap() + /// .try_with_hms(23, 0, 0) + /// .unwrap() /// .using_offset(UtcOffset::hours(1)) /// .month_day(), /// (1, 1), @@ -316,15 +340,18 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .ordinal(), /// 1, /// ); /// assert_eq!( - /// Date::from_ymd(2019, 12, 31) - /// .with_hms(23, 0, 0) + /// Date::try_from_ymd(2019, 12, 31) + /// .unwrap() + /// .try_with_hms(23, 0, 0) + /// .unwrap() /// .using_offset(UtcOffset::hours(1)) /// .ordinal(), /// 1, @@ -340,35 +367,40 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .iso_year_week(), /// (2019, 1), /// ); /// assert_eq!( - /// Date::from_ymd(2019, 10, 4) + /// Date::try_from_ymd(2019, 10, 4) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .iso_year_week(), /// (2019, 40), /// ); /// assert_eq!( - /// Date::from_ymd(2020, 1, 1) + /// Date::try_from_ymd(2020, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .iso_year_week(), /// (2020, 1), /// ); /// assert_eq!( - /// Date::from_ymd(2020, 12, 31) + /// Date::try_from_ymd(2020, 12, 31) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .iso_year_week(), /// (2020, 53), /// ); /// assert_eq!( - /// Date::from_ymd(2021, 1, 1) + /// Date::try_from_ymd(2021, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .iso_year_week(), @@ -387,28 +419,32 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .week(), /// 1, /// ); /// assert_eq!( - /// Date::from_ymd(2020, 1, 1) + /// Date::try_from_ymd(2020, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .week(), /// 1, /// ); /// assert_eq!( - /// Date::from_ymd(2020, 12, 31) + /// Date::try_from_ymd(2020, 12, 31) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .week(), /// 53, /// ); /// assert_eq!( - /// Date::from_ymd(2021, 1, 1) + /// Date::try_from_ymd(2021, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .week(), @@ -428,21 +464,24 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset, Weekday::*}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .weekday(), /// Tuesday, /// ); /// assert_eq!( - /// Date::from_ymd(2019, 2, 1) + /// Date::try_from_ymd(2019, 2, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .weekday(), /// Friday, /// ); /// assert_eq!( - /// Date::from_ymd(2019, 3, 1) + /// Date::try_from_ymd(2019, 3, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .weekday(), @@ -461,15 +500,19 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms(0, 0, 0) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(0, 0, 0) + /// .unwrap() /// .using_offset(UtcOffset::UTC) /// .hour(), /// 0, /// ); /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms(23, 59, 59) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(23, 59, 59) + /// .unwrap() /// .using_offset(UtcOffset::hours(-2)) /// .hour(), /// 21, @@ -487,15 +530,19 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms(0, 0, 0) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(0, 0, 0) + /// .unwrap() /// .using_offset(UtcOffset::UTC) /// .minute(), /// 0, /// ); /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms(23, 59, 59) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(23, 59, 59) + /// .unwrap() /// .using_offset(UtcOffset::minutes(30)) /// .minute(), /// 29, @@ -513,15 +560,19 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms(0, 0, 0) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(0, 0, 0) + /// .unwrap() /// .using_offset(UtcOffset::UTC) /// .second(), /// 0, /// ); /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms(23, 59, 59) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(23, 59, 59) + /// .unwrap() /// .using_offset(UtcOffset::seconds(30)) /// .second(), /// 29, @@ -539,15 +590,19 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms_milli(0, 0, 0, 0) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms_milli(0, 0, 0, 0) + /// .unwrap() /// .using_offset(UtcOffset::UTC) /// .millisecond(), /// 0, /// ); /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms_milli(23, 59, 59, 999) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms_milli(23, 59, 59, 999) + /// .unwrap() /// .using_offset(UtcOffset::UTC) /// .millisecond(), /// 999, @@ -565,15 +620,19 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms_micro(0, 0, 0, 0) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms_micro(0, 0, 0, 0) + /// .unwrap() /// .using_offset(UtcOffset::UTC) /// .microsecond(), /// 0, /// ); /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms_micro(23, 59, 59, 999_999) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms_micro(23, 59, 59, 999_999) + /// .unwrap() /// .using_offset(UtcOffset::UTC) /// .microsecond(), /// 999_999, @@ -591,15 +650,19 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms_nano(0, 0, 0, 0) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms_nano(0, 0, 0, 0) + /// .unwrap() /// .using_offset(UtcOffset::UTC) /// .nanosecond(), /// 0, /// ); /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms_nano(23, 59, 59, 999_999_999) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms_nano(23, 59, 59, 999_999_999) + /// .unwrap() /// .using_offset(UtcOffset::UTC) /// .nanosecond(), /// 999_999_999, @@ -618,7 +681,8 @@ impl OffsetDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 2) + /// Date::try_from_ymd(2019, 1, 2) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .format("%F %r %z"), @@ -642,15 +706,21 @@ impl OffsetDateTime { /// # use time::{Date, PrimitiveDateTime, Weekday::Wednesday}; /// assert_eq!( /// PrimitiveDateTime::parse("2019-01-02 00:00:00", "%F %T"), - /// Ok(Date::from_ymd(2019, 1, 2).midnight()), + /// Ok(Date::try_from_ymd(2019, 1, 2).unwrap().midnight()), /// ); /// assert_eq!( /// PrimitiveDateTime::parse("2019-002 23:59:59", "%Y-%j %T"), - /// Ok(Date::from_yo(2019, 2).with_hms(23, 59, 59)) + /// Ok(Date::try_from_yo(2019, 2) + /// .unwrap() + /// .try_with_hms(23, 59, 59) + /// .unwrap()) /// ); /// assert_eq!( /// PrimitiveDateTime::parse("2019-W01-3 12:00:00 pm", "%G-W%V-%u %r"), - /// Ok(Date::from_iso_ywd(2019, 1, Wednesday).with_hms(12, 0, 0)), + /// Ok(Date::try_from_iso_ywd(2019, 1, Wednesday) + /// .unwrap() + /// .try_with_hms(12, 0, 0) + /// .unwrap()), /// ); /// ``` #[inline(always)] @@ -770,20 +840,20 @@ impl Sub for OffsetDateTime { } #[cfg(test)] -#[allow(clippy::zero_prefixed_literal)] +#[allow(clippy::zero_prefixed_literal, clippy::result_unwrap_used)] mod test { use super::*; use crate::prelude::*; macro_rules! ymd { ($year:literal, $month:literal, $date:literal) => { - Date::from_ymd($year, $month, $date) + Date::try_from_ymd($year, $month, $date).unwrap() }; } macro_rules! time { ($hour:literal : $minute:literal : $second:literal) => { - Time::from_hms($hour, $minute, $second) + Time::try_from_hms($hour, $minute, $second).unwrap() }; } @@ -830,14 +900,16 @@ mod test { fn offset() { assert_eq!( ymd!(2019, 1, 1) - .with_hms(0, 0, 0) + .try_with_hms(0, 0, 0) + .unwrap() .using_offset(UtcOffset::UTC) .offset(), UtcOffset::UTC, ); assert_eq!( ymd!(2019, 1, 1) - .with_hms(0, 0, 0) + .try_with_hms(0, 0, 0) + .unwrap() .using_offset(UtcOffset::hours(1)) .offset(), UtcOffset::hours(1), @@ -902,7 +974,8 @@ mod test { ); assert_eq!( ymd!(2019, 12, 31) - .with_hms(23, 0, 0) + .try_with_hms(23, 0, 0) + .unwrap() .using_offset(UtcOffset::UTC) .to_offset(UtcOffset::hours(1)) .year(), @@ -928,7 +1001,8 @@ mod test { ); assert_eq!( ymd!(2019, 12, 31) - .with_hms(23, 0, 0) + .try_with_hms(23, 0, 0) + .unwrap() .using_offset(UtcOffset::hours(1)) .month(), 1, @@ -946,7 +1020,8 @@ mod test { ); assert_eq!( ymd!(2019, 12, 31) - .with_hms(23, 0, 0) + .try_with_hms(23, 0, 0) + .unwrap() .using_offset(UtcOffset::hours(1)) .day(), 1, @@ -964,7 +1039,8 @@ mod test { ); assert_eq!( ymd!(2019, 12, 31) - .with_hms(23, 0, 0) + .try_with_hms(23, 0, 0) + .unwrap() .using_offset(UtcOffset::hours(1)) .month_day(), (1, 1), @@ -982,7 +1058,8 @@ mod test { ); assert_eq!( ymd!(2019, 12, 31) - .with_hms(23, 0, 0) + .try_with_hms(23, 0, 0) + .unwrap() .using_offset(UtcOffset::hours(1)) .ordinal(), 1, @@ -1051,14 +1128,16 @@ mod test { fn hour() { assert_eq!( ymd!(2019, 1, 1) - .with_hms(0, 0, 0) + .try_with_hms(0, 0, 0) + .unwrap() .using_offset(UtcOffset::UTC) .hour(), 0, ); assert_eq!( ymd!(2019, 1, 1) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::hours(-2)) .hour(), 21, @@ -1069,14 +1148,16 @@ mod test { fn minute() { assert_eq!( ymd!(2019, 1, 1) - .with_hms(0, 0, 0) + .try_with_hms(0, 0, 0) + .unwrap() .using_offset(UtcOffset::UTC) .minute(), 0, ); assert_eq!( ymd!(2019, 1, 1) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::minutes(30)) .minute(), 29, @@ -1087,14 +1168,16 @@ mod test { fn second() { assert_eq!( ymd!(2019, 1, 1) - .with_hms(0, 0, 0) + .try_with_hms(0, 0, 0) + .unwrap() .using_offset(UtcOffset::UTC) .second(), 0, ); assert_eq!( ymd!(2019, 1, 1) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::seconds(30)) .second(), 29, @@ -1105,14 +1188,16 @@ mod test { fn millisecond() { assert_eq!( ymd!(2019, 1, 1) - .with_hms_milli(0, 0, 0, 0) + .try_with_hms_milli(0, 0, 0, 0) + .unwrap() .using_offset(UtcOffset::UTC) .millisecond(), 0, ); assert_eq!( ymd!(2019, 1, 1) - .with_hms_milli(23, 59, 59, 999) + .try_with_hms_milli(23, 59, 59, 999) + .unwrap() .using_offset(UtcOffset::UTC) .millisecond(), 999, @@ -1123,14 +1208,16 @@ mod test { fn microsecond() { assert_eq!( ymd!(2019, 1, 1) - .with_hms_micro(0, 0, 0, 0) + .try_with_hms_micro(0, 0, 0, 0) + .unwrap() .using_offset(UtcOffset::UTC) .microsecond(), 0, ); assert_eq!( ymd!(2019, 1, 1) - .with_hms_micro(23, 59, 59, 999_999) + .try_with_hms_micro(23, 59, 59, 999_999) + .unwrap() .using_offset(UtcOffset::UTC) .microsecond(), 999_999, @@ -1141,14 +1228,16 @@ mod test { fn nanosecond() { assert_eq!( ymd!(2019, 1, 1) - .with_hms_nano(0, 0, 0, 0) + .try_with_hms_nano(0, 0, 0, 0) + .unwrap() .using_offset(UtcOffset::UTC) .nanosecond(), 0, ); assert_eq!( ymd!(2019, 1, 1) - .with_hms_nano(23, 59, 59, 999_999_999) + .try_with_hms_nano(23, 59, 59, 999_999_999) + .unwrap() .using_offset(UtcOffset::UTC) .nanosecond(), 999_999_999, @@ -1175,11 +1264,17 @@ mod test { ); assert_eq!( PrimitiveDateTime::parse("2019-002 23:59:59", "%Y-%j %T"), - Ok(Date::from_yo(2019, 2).with_hms(23, 59, 59)) + Ok(Date::try_from_yo(2019, 2) + .unwrap() + .try_with_hms(23, 59, 59) + .unwrap()) ); assert_eq!( PrimitiveDateTime::parse("2019-W01-3 12:00:00 pm", "%G-W%V-%u %r"), - Ok(Date::from_iso_ywd(2019, 1, Wednesday).with_hms(12, 0, 0)), + Ok(Date::try_from_iso_ywd(2019, 1, Wednesday) + .unwrap() + .try_with_hms(12, 0, 0) + .unwrap()), ); } @@ -1187,7 +1282,8 @@ mod test { fn partial_eq() { assert_eq!( ymd!(1999, 12, 31) - .with_hms(23, 0, 0) + .try_with_hms(23, 0, 0) + .unwrap() .using_offset(UtcOffset::hours(-1)), ymd!(2000, 1, 1).midnight().using_offset(UtcOffset::UTC), ); @@ -1197,7 +1293,8 @@ mod test { fn partial_ord() { let t1 = ymd!(2019, 1, 1).midnight().using_offset(UtcOffset::UTC); let t2 = ymd!(2018, 12, 31) - .with_hms(23, 0, 0) + .try_with_hms(23, 0, 0) + .unwrap() .using_offset(UtcOffset::hours(-1)); assert_eq!(t1.partial_cmp(&t2), Some(Ordering::Equal)); } @@ -1206,7 +1303,8 @@ mod test { fn ord() { let t1 = ymd!(2019, 1, 1).midnight().using_offset(UtcOffset::UTC); let t2 = ymd!(2018, 12, 31) - .with_hms(23, 0, 0) + .try_with_hms(23, 0, 0) + .unwrap() .using_offset(UtcOffset::hours(-1)); assert_eq!(t1, t2); } @@ -1228,7 +1326,8 @@ mod test { { let mut hasher = DefaultHasher::new(); ymd!(2018, 12, 31) - .with_hms(23, 0, 0) + .try_with_hms(23, 0, 0) + .unwrap() .using_offset(UtcOffset::hours(-1)) .hash(&mut hasher); hasher.finish() @@ -1248,25 +1347,30 @@ mod test { ); assert_eq!( ymd!(2019, 12, 31) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::UTC) + 2.seconds(), ymd!(2020, 1, 1) - .with_hms(0, 0, 1) + .try_with_hms(0, 0, 1) + .unwrap() .using_offset(UtcOffset::UTC), ); assert_eq!( ymd!(2020, 1, 1) - .with_hms(0, 0, 1) + .try_with_hms(0, 0, 1) + .unwrap() .using_offset(UtcOffset::UTC) + (-2).seconds(), ymd!(2019, 12, 31) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::UTC), ); assert_eq!( ymd!(1999, 12, 31) - .with_hms(23, 0, 0) + .try_with_hms(23, 0, 0) + .unwrap() .using_offset(UtcOffset::UTC) + 1.hours(), ymd!(2000, 1, 1).midnight().using_offset(UtcOffset::UTC), @@ -1285,11 +1389,13 @@ mod test { ); assert_eq!( ymd!(2019, 12, 31) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::UTC) + 2.std_seconds(), ymd!(2020, 1, 1) - .with_hms(0, 0, 1) + .try_with_hms(0, 0, 1) + .unwrap() .using_offset(UtcOffset::UTC), ); } @@ -1311,24 +1417,28 @@ mod test { ); let mut nye20t = ymd!(2019, 12, 31) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::UTC); nye20t += 2.seconds(); assert_eq!( nye20t, ymd!(2020, 1, 1) - .with_hms(0, 0, 1) + .try_with_hms(0, 0, 1) + .unwrap() .using_offset(UtcOffset::UTC) ); let mut ny20t = ymd!(2020, 1, 1) - .with_hms(0, 0, 1) + .try_with_hms(0, 0, 1) + .unwrap() .using_offset(UtcOffset::UTC); ny20t += (-2).seconds(); assert_eq!( ny20t, ymd!(2019, 12, 31) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::UTC) ); } @@ -1350,13 +1460,15 @@ mod test { ); let mut nye20t = ymd!(2019, 12, 31) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::UTC); nye20t += 2.std_seconds(); assert_eq!( nye20t, ymd!(2020, 1, 1) - .with_hms(0, 0, 1) + .try_with_hms(0, 0, 1) + .unwrap() .using_offset(UtcOffset::UTC) ); } @@ -1373,25 +1485,30 @@ mod test { ); assert_eq!( ymd!(2020, 1, 1) - .with_hms(0, 0, 1) + .try_with_hms(0, 0, 1) + .unwrap() .using_offset(UtcOffset::UTC) - 2.seconds(), ymd!(2019, 12, 31) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::UTC), ); assert_eq!( ymd!(2019, 12, 31) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::UTC) - (-2).seconds(), ymd!(2020, 1, 1) - .with_hms(0, 0, 1) + .try_with_hms(0, 0, 1) + .unwrap() .using_offset(UtcOffset::UTC), ); assert_eq!( ymd!(1999, 12, 31) - .with_hms(23, 0, 0) + .try_with_hms(23, 0, 0) + .unwrap() .using_offset(UtcOffset::UTC) - (-1).hours(), ymd!(2000, 1, 1).midnight().using_offset(UtcOffset::UTC), @@ -1410,11 +1527,13 @@ mod test { ); assert_eq!( ymd!(2020, 1, 1) - .with_hms(0, 0, 1) + .try_with_hms(0, 0, 1) + .unwrap() .using_offset(UtcOffset::UTC) - 2.std_seconds(), ymd!(2019, 12, 31) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::UTC), ); } @@ -1436,24 +1555,28 @@ mod test { ); let mut ny20t = ymd!(2020, 1, 1) - .with_hms(0, 0, 1) + .try_with_hms(0, 0, 1) + .unwrap() .using_offset(UtcOffset::UTC); ny20t -= 2.seconds(); assert_eq!( ny20t, ymd!(2019, 12, 31) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::UTC) ); let mut nye20t = ymd!(2019, 12, 31) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::UTC); nye20t -= (-2).seconds(); assert_eq!( nye20t, ymd!(2020, 1, 1) - .with_hms(0, 0, 1) + .try_with_hms(0, 0, 1) + .unwrap() .using_offset(UtcOffset::UTC) ); } @@ -1475,13 +1598,15 @@ mod test { ); let mut ny20t = ymd!(2020, 1, 1) - .with_hms(0, 0, 1) + .try_with_hms(0, 0, 1) + .unwrap() .using_offset(UtcOffset::UTC); ny20t -= 2.std_seconds(); assert_eq!( ny20t, ymd!(2019, 12, 31) - .with_hms(23, 59, 59) + .try_with_hms(23, 59, 59) + .unwrap() .using_offset(UtcOffset::UTC) ); } diff --git a/src/primitive_date_time.rs b/src/primitive_date_time.rs index e7a8b2fe0..3b52902db 100644 --- a/src/primitive_date_time.rs +++ b/src/primitive_date_time.rs @@ -7,10 +7,9 @@ use crate::{ Date, DeferredFormat, Duration, OffsetDateTime, Time, UtcOffset, Weekday, }; #[cfg(feature = "std")] -use core::convert::From; +use core::convert::{From, TryFrom}; use core::{ cmp::Ordering, - convert::TryFrom, ops::{Add, AddAssign, Sub, SubAssign}, time::Duration as StdDuration, }; @@ -40,8 +39,8 @@ impl PrimitiveDateTime { /// ```rust /// # use time::{Date, PrimitiveDateTime, Time}; /// assert_eq!( - /// PrimitiveDateTime::new(Date::from_ymd(2019, 1, 1), Time::midnight()), - /// Date::from_ymd(2019, 1, 1).midnight(), + /// PrimitiveDateTime::new(Date::try_from_ymd(2019, 1, 1).unwrap(), Time::midnight()), + /// Date::try_from_ymd(2019, 1, 1).unwrap().midnight(), /// ); /// ``` #[inline(always)] @@ -68,7 +67,7 @@ impl PrimitiveDateTime { /// # use time::{Date, PrimitiveDateTime, Time}; /// assert_eq!( /// PrimitiveDateTime::unix_epoch(), - /// Date::from_ymd(1970, 1, 1).midnight() + /// Date::try_from_ymd(1970, 1, 1).unwrap().midnight() /// ); /// ``` #[inline(always)] @@ -97,7 +96,7 @@ impl PrimitiveDateTime { /// ); /// assert_eq!( /// PrimitiveDateTime::from_unix_timestamp(1_546_300_800), - /// Date::from_ymd(2019, 1, 1).midnight(), + /// Date::try_from_ymd(2019, 1, 1).unwrap().midnight(), /// ); /// ``` #[inline(always)] @@ -112,7 +111,10 @@ impl PrimitiveDateTime { /// # use time::{Date, PrimitiveDateTime}; /// assert_eq!(PrimitiveDateTime::unix_epoch().timestamp(), 0); /// assert_eq!( - /// Date::from_ymd(2019, 1, 1).midnight().timestamp(), + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .midnight() + /// .timestamp(), /// 1_546_300_800 /// ); /// ``` @@ -126,8 +128,8 @@ impl PrimitiveDateTime { /// ```rust /// # use time::Date; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1).midnight().date(), - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1).unwrap().midnight().date(), + /// Date::try_from_ymd(2019, 1, 1).unwrap() /// ); /// ``` #[inline(always)] @@ -139,7 +141,7 @@ impl PrimitiveDateTime { /// /// ```rust /// # use time::{Date, Time}; - /// assert_eq!(Date::from_ymd(2019, 1, 1).midnight().time(), Time::midnight()); + /// assert_eq!(Date::try_from_ymd(2019, 1, 1).unwrap().midnight().time(), Time::midnight()); #[inline(always)] pub const fn time(self) -> Time { self.time @@ -149,9 +151,18 @@ impl PrimitiveDateTime { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).midnight().year(), 2019); - /// assert_eq!(Date::from_ymd(2019, 12, 31).midnight().year(), 2019); - /// assert_eq!(Date::from_ymd(2020, 1, 1).midnight().year(), 2020); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1).unwrap().midnight().year(), + /// 2019 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 12, 31).unwrap().midnight().year(), + /// 2019 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2020, 1, 1).unwrap().midnight().year(), + /// 2020 + /// ); /// ``` #[inline(always)] pub fn year(self) -> i32 { @@ -165,8 +176,14 @@ impl PrimitiveDateTime { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).midnight().month(), 1); - /// assert_eq!(Date::from_ymd(2019, 12, 31).midnight().month(), 12); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1).unwrap().midnight().month(), + /// 1 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 12, 31).unwrap().midnight().month(), + /// 12 + /// ); /// ``` #[inline(always)] pub fn month(self) -> u8 { @@ -180,8 +197,11 @@ impl PrimitiveDateTime { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).midnight().day(), 1); - /// assert_eq!(Date::from_ymd(2019, 12, 31).midnight().day(), 31); + /// assert_eq!(Date::try_from_ymd(2019, 1, 1).unwrap().midnight().day(), 1); + /// assert_eq!( + /// Date::try_from_ymd(2019, 12, 31).unwrap().midnight().day(), + /// 31 + /// ); /// ``` #[inline(always)] pub fn day(self) -> u8 { @@ -196,9 +216,18 @@ impl PrimitiveDateTime { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).midnight().month_day(), (1, 1)); /// assert_eq!( - /// Date::from_ymd(2019, 12, 31).midnight().month_day(), + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .midnight() + /// .month_day(), + /// (1, 1) + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 12, 31) + /// .unwrap() + /// .midnight() + /// .month_day(), /// (12, 31) /// ); /// ``` @@ -214,8 +243,17 @@ impl PrimitiveDateTime { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).midnight().ordinal(), 1); - /// assert_eq!(Date::from_ymd(2019, 12, 31).midnight().ordinal(), 365); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1).unwrap().midnight().ordinal(), + /// 1 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 12, 31) + /// .unwrap() + /// .midnight() + /// .ordinal(), + /// 365 + /// ); /// ``` #[inline(always)] pub fn ordinal(self) -> u16 { @@ -227,23 +265,38 @@ impl PrimitiveDateTime { /// ```rust /// # use time::Date; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1).midnight().iso_year_week(), + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .midnight() + /// .iso_year_week(), /// (2019, 1) /// ); /// assert_eq!( - /// Date::from_ymd(2019, 10, 4).midnight().iso_year_week(), + /// Date::try_from_ymd(2019, 10, 4) + /// .unwrap() + /// .midnight() + /// .iso_year_week(), /// (2019, 40) /// ); /// assert_eq!( - /// Date::from_ymd(2020, 1, 1).midnight().iso_year_week(), + /// Date::try_from_ymd(2020, 1, 1) + /// .unwrap() + /// .midnight() + /// .iso_year_week(), /// (2020, 1) /// ); /// assert_eq!( - /// Date::from_ymd(2020, 12, 31).midnight().iso_year_week(), + /// Date::try_from_ymd(2020, 12, 31) + /// .unwrap() + /// .midnight() + /// .iso_year_week(), /// (2020, 53) /// ); /// assert_eq!( - /// Date::from_ymd(2021, 1, 1).midnight().iso_year_week(), + /// Date::try_from_ymd(2021, 1, 1) + /// .unwrap() + /// .midnight() + /// .iso_year_week(), /// (2020, 53) /// ); /// ``` @@ -258,11 +311,20 @@ impl PrimitiveDateTime { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).midnight().week(), 1); - /// assert_eq!(Date::from_ymd(2019, 10, 4).midnight().week(), 40); - /// assert_eq!(Date::from_ymd(2020, 1, 1).midnight().week(), 1); - /// assert_eq!(Date::from_ymd(2020, 12, 31).midnight().week(), 53); - /// assert_eq!(Date::from_ymd(2021, 1, 1).midnight().week(), 53); + /// assert_eq!(Date::try_from_ymd(2019, 1, 1).unwrap().midnight().week(), 1); + /// assert_eq!( + /// Date::try_from_ymd(2019, 10, 4).unwrap().midnight().week(), + /// 40 + /// ); + /// assert_eq!(Date::try_from_ymd(2020, 1, 1).unwrap().midnight().week(), 1); + /// assert_eq!( + /// Date::try_from_ymd(2020, 12, 31).unwrap().midnight().week(), + /// 53 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2021, 1, 1).unwrap().midnight().week(), + /// 53 + /// ); /// ``` #[inline(always)] pub fn week(self) -> u8 { @@ -275,13 +337,34 @@ impl PrimitiveDateTime { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).midnight().sunday_based_week(), 0); - /// assert_eq!(Date::from_ymd(2020, 1, 1).midnight().sunday_based_week(), 0); /// assert_eq!( - /// Date::from_ymd(2020, 12, 31).midnight().sunday_based_week(), + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .midnight() + /// .sunday_based_week(), + /// 0 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2020, 1, 1) + /// .unwrap() + /// .midnight() + /// .sunday_based_week(), + /// 0 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2020, 12, 31) + /// .unwrap() + /// .midnight() + /// .sunday_based_week(), /// 52 /// ); - /// assert_eq!(Date::from_ymd(2021, 1, 1).midnight().sunday_based_week(), 0); + /// assert_eq!( + /// Date::try_from_ymd(2021, 1, 1) + /// .unwrap() + /// .midnight() + /// .sunday_based_week(), + /// 0 + /// ); /// ``` #[inline(always)] pub fn sunday_based_week(self) -> u8 { @@ -294,13 +377,34 @@ impl PrimitiveDateTime { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).midnight().monday_based_week(), 0); - /// assert_eq!(Date::from_ymd(2020, 1, 1).midnight().monday_based_week(), 0); /// assert_eq!( - /// Date::from_ymd(2020, 12, 31).midnight().monday_based_week(), + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .midnight() + /// .monday_based_week(), + /// 0 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2020, 1, 1) + /// .unwrap() + /// .midnight() + /// .monday_based_week(), + /// 0 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2020, 12, 31) + /// .unwrap() + /// .midnight() + /// .monday_based_week(), /// 52 /// ); - /// assert_eq!(Date::from_ymd(2021, 1, 1).midnight().monday_based_week(), 0); + /// assert_eq!( + /// Date::try_from_ymd(2021, 1, 1) + /// .unwrap() + /// .midnight() + /// .monday_based_week(), + /// 0 + /// ); /// ``` #[inline(always)] pub fn monday_based_week(self) -> u8 { @@ -314,18 +418,63 @@ impl PrimitiveDateTime { /// /// ```rust /// # use time::{Date, Weekday::*}; - /// assert_eq!(Date::from_ymd(2019, 1, 1).midnight().weekday(), Tuesday); - /// assert_eq!(Date::from_ymd(2019, 2, 1).midnight().weekday(), Friday); - /// assert_eq!(Date::from_ymd(2019, 3, 1).midnight().weekday(), Friday); - /// assert_eq!(Date::from_ymd(2019, 4, 1).midnight().weekday(), Monday); - /// assert_eq!(Date::from_ymd(2019, 5, 1).midnight().weekday(), Wednesday); - /// assert_eq!(Date::from_ymd(2019, 6, 1).midnight().weekday(), Saturday); - /// assert_eq!(Date::from_ymd(2019, 7, 1).midnight().weekday(), Monday); - /// assert_eq!(Date::from_ymd(2019, 8, 1).midnight().weekday(), Thursday); - /// assert_eq!(Date::from_ymd(2019, 9, 1).midnight().weekday(), Sunday); - /// assert_eq!(Date::from_ymd(2019, 10, 1).midnight().weekday(), Tuesday); - /// assert_eq!(Date::from_ymd(2019, 11, 1).midnight().weekday(), Friday); - /// assert_eq!(Date::from_ymd(2019, 12, 1).midnight().weekday(), Sunday); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1).unwrap().midnight().weekday(), + /// Tuesday + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 2, 1).unwrap().midnight().weekday(), + /// Friday + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 3, 1).unwrap().midnight().weekday(), + /// Friday + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 4, 1).unwrap().midnight().weekday(), + /// Monday + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 5, 1).unwrap().midnight().weekday(), + /// Wednesday + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 6, 1).unwrap().midnight().weekday(), + /// Saturday + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 7, 1).unwrap().midnight().weekday(), + /// Monday + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 8, 1).unwrap().midnight().weekday(), + /// Thursday + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 9, 1).unwrap().midnight().weekday(), + /// Sunday + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 10, 1) + /// .unwrap() + /// .midnight() + /// .weekday(), + /// Tuesday + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 11, 1) + /// .unwrap() + /// .midnight() + /// .weekday(), + /// Friday + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 12, 1) + /// .unwrap() + /// .midnight() + /// .weekday(), + /// Sunday + /// ); /// ``` #[inline(always)] pub fn weekday(self) -> Weekday { @@ -338,8 +487,22 @@ impl PrimitiveDateTime { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).with_hms(0, 0, 0).hour(), 0); - /// assert_eq!(Date::from_ymd(2019, 1, 1).with_hms(23, 59, 59).hour(), 23); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(0, 0, 0) + /// .unwrap() + /// .hour(), + /// 0 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(23, 59, 59) + /// .unwrap() + /// .hour(), + /// 23 + /// ); /// ``` #[inline(always)] pub const fn hour(self) -> u8 { @@ -352,8 +515,22 @@ impl PrimitiveDateTime { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).with_hms(0, 0, 0).minute(), 0); - /// assert_eq!(Date::from_ymd(2019, 1, 1).with_hms(23, 59, 59).minute(), 59); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(0, 0, 0) + /// .unwrap() + /// .minute(), + /// 0 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(23, 59, 59) + /// .unwrap() + /// .minute(), + /// 59 + /// ); /// ``` #[inline(always)] pub const fn minute(self) -> u8 { @@ -366,8 +543,22 @@ impl PrimitiveDateTime { /// /// ```rust /// # use time::Date; - /// assert_eq!(Date::from_ymd(2019, 1, 1).with_hms(0, 0, 0).second(), 0); - /// assert_eq!(Date::from_ymd(2019, 1, 1).with_hms(23, 59, 59).second(), 59); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(0, 0, 0) + /// .unwrap() + /// .second(), + /// 0 + /// ); + /// assert_eq!( + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms(23, 59, 59) + /// .unwrap() + /// .second(), + /// 59 + /// ); /// ``` #[inline(always)] pub const fn second(self) -> u8 { @@ -381,14 +572,18 @@ impl PrimitiveDateTime { /// ```rust /// # use time::Date; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms_milli(0, 0, 0, 0) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms_milli(0, 0, 0, 0) + /// .unwrap() /// .millisecond(), /// 0 /// ); /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms_milli(23, 59, 59, 999) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms_milli(23, 59, 59, 999) + /// .unwrap() /// .millisecond(), /// 999 /// ); @@ -405,14 +600,18 @@ impl PrimitiveDateTime { /// ```rust /// # use time::Date; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms_micro(0, 0, 0, 0) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms_micro(0, 0, 0, 0) + /// .unwrap() /// .microsecond(), /// 0 /// ); /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms_micro(23, 59, 59, 999_999) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms_micro(23, 59, 59, 999_999) + /// .unwrap() /// .microsecond(), /// 999_999 /// ); @@ -429,14 +628,18 @@ impl PrimitiveDateTime { /// ```rust /// # use time::Date; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms_nano(0, 0, 0, 0) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms_nano(0, 0, 0, 0) + /// .unwrap() /// .nanosecond(), /// 0 /// ); /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) - /// .with_hms_nano(23, 59, 59, 999_999_999) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() + /// .try_with_hms_nano(23, 59, 59, 999_999_999) + /// .unwrap() /// .nanosecond(), /// 999_999_999 /// ); @@ -452,7 +655,8 @@ impl PrimitiveDateTime { /// ```rust /// # use time::{Date, UtcOffset}; /// assert_eq!( - /// Date::from_ymd(2019, 1, 1) + /// Date::try_from_ymd(2019, 1, 1) + /// .unwrap() /// .midnight() /// .using_offset(UtcOffset::UTC) /// .timestamp(), @@ -475,7 +679,10 @@ impl PrimitiveDateTime { /// ```rust /// # use time::Date; /// assert_eq!( - /// Date::from_ymd(2019, 1, 2).midnight().format("%F %r"), + /// Date::try_from_ymd(2019, 1, 2) + /// .unwrap() + /// .midnight() + /// .format("%F %r"), /// "2019-01-02 12:00:00 am" /// ); /// ``` @@ -496,15 +703,21 @@ impl PrimitiveDateTime { /// # use time::{Date, PrimitiveDateTime, Weekday::Wednesday}; /// assert_eq!( /// PrimitiveDateTime::parse("2019-01-02 00:00:00", "%F %T"), - /// Ok(Date::from_ymd(2019, 1, 2).midnight()), + /// Ok(Date::try_from_ymd(2019, 1, 2).unwrap().midnight()), /// ); /// assert_eq!( /// PrimitiveDateTime::parse("2019-002 23:59:59", "%Y-%j %T"), - /// Ok(Date::from_yo(2019, 2).with_hms(23, 59, 59)) + /// Ok(Date::try_from_yo(2019, 2) + /// .unwrap() + /// .try_with_hms(23, 59, 59) + /// .unwrap()) /// ); /// assert_eq!( /// PrimitiveDateTime::parse("2019-W01-3 12:00:00 pm", "%G-W%V-%u %r"), - /// Ok(Date::from_iso_ywd(2019, 1, Wednesday).with_hms(12, 0, 0)), + /// Ok(Date::try_from_iso_ywd(2019, 1, Wednesday) + /// .unwrap() + /// .try_with_hms(12, 0, 0) + /// .unwrap()), /// ); /// ``` #[inline(always)] @@ -774,13 +987,14 @@ impl From for SystemTime { } #[cfg(test)] +#[allow(clippy::result_unwrap_used)] mod test { use super::*; use crate::prelude::*; macro_rules! ymd { ($year:literal, $month:literal, $day:literal) => { - Date::from_ymd($year, $month, $day) + Date::try_from_ymd($year, $month, $day).unwrap() }; } @@ -906,28 +1120,44 @@ mod test { #[test] fn hour() { - assert_eq!(ymd!(2019, 1, 1).with_hms(0, 0, 0).hour(), 0); - assert_eq!(ymd!(2019, 1, 1).with_hms(23, 59, 59).hour(), 23); + assert_eq!(ymd!(2019, 1, 1).try_with_hms(0, 0, 0).unwrap().hour(), 0); + assert_eq!( + ymd!(2019, 1, 1).try_with_hms(23, 59, 59).unwrap().hour(), + 23 + ); } #[test] fn minute() { - assert_eq!(ymd!(2019, 1, 1).with_hms(0, 0, 0).minute(), 0); - assert_eq!(ymd!(2019, 1, 1).with_hms(23, 59, 59).minute(), 59); + assert_eq!(ymd!(2019, 1, 1).try_with_hms(0, 0, 0).unwrap().minute(), 0); + assert_eq!( + ymd!(2019, 1, 1).try_with_hms(23, 59, 59).unwrap().minute(), + 59 + ); } #[test] fn second() { - assert_eq!(ymd!(2019, 1, 1).with_hms(0, 0, 0).second(), 0); - assert_eq!(ymd!(2019, 1, 1).with_hms(23, 59, 59).second(), 59); + assert_eq!(ymd!(2019, 1, 1).try_with_hms(0, 0, 0).unwrap().second(), 0); + assert_eq!( + ymd!(2019, 1, 1).try_with_hms(23, 59, 59).unwrap().second(), + 59 + ); } #[test] fn millisecond() { - assert_eq!(ymd!(2019, 1, 1).with_hms_milli(0, 0, 0, 0).millisecond(), 0); assert_eq!( ymd!(2019, 1, 1) - .with_hms_milli(23, 59, 59, 999) + .try_with_hms_milli(0, 0, 0, 0) + .unwrap() + .millisecond(), + 0 + ); + assert_eq!( + ymd!(2019, 1, 1) + .try_with_hms_milli(23, 59, 59, 999) + .unwrap() .millisecond(), 999 ); @@ -935,10 +1165,17 @@ mod test { #[test] fn microsecond() { - assert_eq!(ymd!(2019, 1, 1).with_hms_micro(0, 0, 0, 0).microsecond(), 0); assert_eq!( ymd!(2019, 1, 1) - .with_hms_micro(23, 59, 59, 999_999) + .try_with_hms_micro(0, 0, 0, 0) + .unwrap() + .microsecond(), + 0 + ); + assert_eq!( + ymd!(2019, 1, 1) + .try_with_hms_micro(23, 59, 59, 999_999) + .unwrap() .microsecond(), 999_999 ); @@ -946,10 +1183,17 @@ mod test { #[test] fn nanosecond() { - assert_eq!(ymd!(2019, 1, 1).with_hms_nano(0, 0, 0, 0).nanosecond(), 0); assert_eq!( ymd!(2019, 1, 1) - .with_hms_nano(23, 59, 59, 999_999_999) + .try_with_hms_nano(0, 0, 0, 0) + .unwrap() + .nanosecond(), + 0 + ); + assert_eq!( + ymd!(2019, 1, 1) + .try_with_hms_nano(23, 59, 59, 999_999_999) + .unwrap() .nanosecond(), 999_999_999 ); @@ -982,11 +1226,17 @@ mod test { ); assert_eq!( PrimitiveDateTime::parse("2019-002 23:59:59", "%Y-%j %T"), - Ok(Date::from_yo(2019, 2).with_hms(23, 59, 59)) + Ok(Date::try_from_yo(2019, 2) + .unwrap() + .try_with_hms(23, 59, 59) + .unwrap()) ); assert_eq!( PrimitiveDateTime::parse("2019-W01-3 12:00:00 pm", "%G-W%V-%u %r"), - Ok(Date::from_iso_ywd(2019, 1, Weekday::Wednesday).with_hms(12, 0, 0)), + Ok(Date::try_from_iso_ywd(2019, 1, Weekday::Wednesday) + .unwrap() + .try_with_hms(12, 0, 0) + .unwrap()), ); } @@ -1001,15 +1251,15 @@ mod test { ymd!(2020, 1, 1).midnight(), ); assert_eq!( - ymd!(2019, 12, 31).with_hms(23, 59, 59) + 2.seconds(), - ymd!(2020, 1, 1).with_hms(0, 0, 1), + ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap() + 2.seconds(), + ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap(), ); assert_eq!( - ymd!(2020, 1, 1).with_hms(0, 0, 1) + (-2).seconds(), - ymd!(2019, 12, 31).with_hms(23, 59, 59), + ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap() + (-2).seconds(), + ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap(), ); assert_eq!( - ymd!(1999, 12, 31).with_hms(23, 0, 0) + 1.hours(), + ymd!(1999, 12, 31).try_with_hms(23, 0, 0).unwrap() + 1.hours(), ymd!(2000, 1, 1).midnight(), ); } @@ -1026,12 +1276,12 @@ mod test { SystemTime::from(ymd!(2020, 1, 1).midnight()), ); assert_eq!( - SystemTime::from(ymd!(2019, 12, 31).with_hms(23, 59, 59)) + 2.seconds(), - SystemTime::from(ymd!(2020, 1, 1).with_hms(0, 0, 1)), + SystemTime::from(ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap()) + 2.seconds(), + SystemTime::from(ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap()), ); assert_eq!( - SystemTime::from(ymd!(2020, 1, 1).with_hms(0, 0, 1)) + (-2).seconds(), - SystemTime::from(ymd!(2019, 12, 31).with_hms(23, 59, 59)), + SystemTime::from(ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap()) + (-2).seconds(), + SystemTime::from(ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap()), ); } @@ -1046,8 +1296,8 @@ mod test { ymd!(2020, 1, 1).midnight(), ); assert_eq!( - ymd!(2019, 12, 31).with_hms(23, 59, 59) + 2.std_seconds(), - ymd!(2020, 1, 1).with_hms(0, 0, 1), + ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap() + 2.std_seconds(), + ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap(), ); } @@ -1061,13 +1311,13 @@ mod test { nye20 += 1.days(); assert_eq!(nye20, ymd!(2020, 1, 1).midnight()); - let mut nye20t = ymd!(2019, 12, 31).with_hms(23, 59, 59); + let mut nye20t = ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap(); nye20t += 2.seconds(); - assert_eq!(nye20t, ymd!(2020, 1, 1).with_hms(0, 0, 1)); + assert_eq!(nye20t, ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap()); - let mut ny20t = ymd!(2020, 1, 1).with_hms(0, 0, 1); + let mut ny20t = ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap(); ny20t += (-2).seconds(); - assert_eq!(ny20t, ymd!(2019, 12, 31).with_hms(23, 59, 59)); + assert_eq!(ny20t, ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap()); } #[test] @@ -1080,9 +1330,9 @@ mod test { nye20 += 1.std_days(); assert_eq!(nye20, ymd!(2020, 1, 1).midnight()); - let mut nye20t = ymd!(2019, 12, 31).with_hms(23, 59, 59); + let mut nye20t = ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap(); nye20t += 2.std_seconds(); - assert_eq!(nye20t, ymd!(2020, 1, 1).with_hms(0, 0, 1)); + assert_eq!(nye20t, ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap()); } #[test] @@ -1096,13 +1346,13 @@ mod test { nye20 += 1.days(); assert_eq!(nye20, ymd!(2020, 1, 1).midnight()); - let mut nye20t = SystemTime::from(ymd!(2019, 12, 31).with_hms(23, 59, 59)); + let mut nye20t = SystemTime::from(ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap()); nye20t += 2.seconds(); - assert_eq!(nye20t, ymd!(2020, 1, 1).with_hms(0, 0, 1)); + assert_eq!(nye20t, ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap()); - let mut ny20t = SystemTime::from(ymd!(2020, 1, 1).with_hms(0, 0, 1)); + let mut ny20t = SystemTime::from(ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap()); ny20t += (-2).seconds(); - assert_eq!(ny20t, ymd!(2019, 12, 31).with_hms(23, 59, 59)); + assert_eq!(ny20t, ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap()); } #[test] @@ -1116,15 +1366,15 @@ mod test { ymd!(2019, 12, 31).midnight(), ); assert_eq!( - ymd!(2020, 1, 1).with_hms(0, 0, 1) - 2.seconds(), - ymd!(2019, 12, 31).with_hms(23, 59, 59), + ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap() - 2.seconds(), + ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap(), ); assert_eq!( - ymd!(2019, 12, 31).with_hms(23, 59, 59) - (-2).seconds(), - ymd!(2020, 1, 1).with_hms(0, 0, 1), + ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap() - (-2).seconds(), + ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap(), ); assert_eq!( - ymd!(1999, 12, 31).with_hms(23, 0, 0) - (-1).hours(), + ymd!(1999, 12, 31).try_with_hms(23, 0, 0).unwrap() - (-1).hours(), ymd!(2000, 1, 1).midnight(), ); } @@ -1140,8 +1390,8 @@ mod test { ymd!(2019, 12, 31).midnight(), ); assert_eq!( - ymd!(2020, 1, 1).with_hms(0, 0, 1) - 2.std_seconds(), - ymd!(2019, 12, 31).with_hms(23, 59, 59), + ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap() - 2.std_seconds(), + ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap(), ); } @@ -1157,12 +1407,12 @@ mod test { SystemTime::from(ymd!(2019, 12, 31).midnight()), ); assert_eq!( - SystemTime::from(ymd!(2020, 1, 1).with_hms(0, 0, 1)) - 2.seconds(), - SystemTime::from(ymd!(2019, 12, 31).with_hms(23, 59, 59)), + SystemTime::from(ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap()) - 2.seconds(), + SystemTime::from(ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap()), ); assert_eq!( - SystemTime::from(ymd!(2019, 12, 31).with_hms(23, 59, 59)) - (-2).seconds(), - SystemTime::from(ymd!(2020, 1, 1).with_hms(0, 0, 1)), + SystemTime::from(ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap()) - (-2).seconds(), + SystemTime::from(ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap()), ); } @@ -1176,13 +1426,13 @@ mod test { ny20 -= 1.days(); assert_eq!(ny20, ymd!(2019, 12, 31).midnight()); - let mut ny20t = ymd!(2020, 1, 1).with_hms(0, 0, 1); + let mut ny20t = ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap(); ny20t -= 2.seconds(); - assert_eq!(ny20t, ymd!(2019, 12, 31).with_hms(23, 59, 59)); + assert_eq!(ny20t, ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap()); - let mut nye20t = ymd!(2019, 12, 31).with_hms(23, 59, 59); + let mut nye20t = ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap(); nye20t -= (-2).seconds(); - assert_eq!(nye20t, ymd!(2020, 1, 1).with_hms(0, 0, 1)); + assert_eq!(nye20t, ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap()); } #[test] @@ -1195,9 +1445,9 @@ mod test { ny20 -= 1.std_days(); assert_eq!(ny20, ymd!(2019, 12, 31).midnight()); - let mut ny20t = ymd!(2020, 1, 1).with_hms(0, 0, 1); + let mut ny20t = ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap(); ny20t -= 2.std_seconds(); - assert_eq!(ny20t, ymd!(2019, 12, 31).with_hms(23, 59, 59)); + assert_eq!(ny20t, ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap()); } #[test] @@ -1211,13 +1461,13 @@ mod test { ny20 -= 1.days(); assert_eq!(ny20, ymd!(2019, 12, 31).midnight()); - let mut ny20t = SystemTime::from(ymd!(2020, 1, 1).with_hms(0, 0, 1)); + let mut ny20t = SystemTime::from(ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap()); ny20t -= 2.seconds(); - assert_eq!(ny20t, ymd!(2019, 12, 31).with_hms(23, 59, 59)); + assert_eq!(ny20t, ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap()); - let mut nye20t = SystemTime::from(ymd!(2019, 12, 31).with_hms(23, 59, 59)); + let mut nye20t = SystemTime::from(ymd!(2019, 12, 31).try_with_hms(23, 59, 59).unwrap()); nye20t -= (-2).seconds(); - assert_eq!(nye20t, ymd!(2020, 1, 1).with_hms(0, 0, 1)); + assert_eq!(nye20t, ymd!(2020, 1, 1).try_with_hms(0, 0, 1).unwrap()); } #[test] @@ -1312,25 +1562,25 @@ mod test { assert_eq!( ymd!(2019, 1, 1) .midnight() - .partial_cmp(&ymd!(2019, 1, 1).with_hms(1, 0, 0)), + .partial_cmp(&ymd!(2019, 1, 1).try_with_hms(1, 0, 0).unwrap()), Some(Less) ); assert_eq!( ymd!(2019, 1, 1) .midnight() - .partial_cmp(&ymd!(2019, 1, 1).with_hms(0, 1, 0)), + .partial_cmp(&ymd!(2019, 1, 1).try_with_hms(0, 1, 0).unwrap()), Some(Less) ); assert_eq!( ymd!(2019, 1, 1) .midnight() - .partial_cmp(&ymd!(2019, 1, 1).with_hms(0, 0, 1)), + .partial_cmp(&ymd!(2019, 1, 1).try_with_hms(0, 0, 1).unwrap()), Some(Less) ); assert_eq!( ymd!(2019, 1, 1) .midnight() - .partial_cmp(&ymd!(2019, 1, 1).with_hms_nano(0, 0, 0, 1)), + .partial_cmp(&ymd!(2019, 1, 1).try_with_hms_nano(0, 0, 0, 1).unwrap()), Some(Less) ); assert_eq!( @@ -1353,25 +1603,29 @@ mod test { ); assert_eq!( ymd!(2019, 1, 1) - .with_hms(1, 0, 0) + .try_with_hms(1, 0, 0) + .unwrap() .partial_cmp(&ymd!(2019, 1, 1).midnight()), Some(Greater) ); assert_eq!( ymd!(2019, 1, 1) - .with_hms(0, 1, 0) + .try_with_hms(0, 1, 0) + .unwrap() .partial_cmp(&ymd!(2019, 1, 1).midnight()), Some(Greater) ); assert_eq!( ymd!(2019, 1, 1) - .with_hms(0, 0, 1) + .try_with_hms(0, 0, 1) + .unwrap() .partial_cmp(&ymd!(2019, 1, 1).midnight()), Some(Greater) ); assert_eq!( ymd!(2019, 1, 1) - .with_hms_nano(0, 0, 0, 1) + .try_with_hms_nano(0, 0, 0, 1) + .unwrap() .partial_cmp(&ymd!(2019, 1, 1).midnight()), Some(Greater) ); @@ -1404,21 +1658,39 @@ mod test { assert!(ymd!(2019, 1, 1).midnight() < SystemTime::from(ymd!(2020, 1, 1).midnight())); assert!(ymd!(2019, 1, 1).midnight() < SystemTime::from(ymd!(2019, 2, 1).midnight())); assert!(ymd!(2019, 1, 1).midnight() < SystemTime::from(ymd!(2019, 1, 2).midnight())); - assert!(ymd!(2019, 1, 1).midnight() < SystemTime::from(ymd!(2019, 1, 1).with_hms(1, 0, 0))); - assert!(ymd!(2019, 1, 1).midnight() < SystemTime::from(ymd!(2019, 1, 1).with_hms(0, 1, 0))); - assert!(ymd!(2019, 1, 1).midnight() < SystemTime::from(ymd!(2019, 1, 1).with_hms(0, 0, 1))); assert!( ymd!(2019, 1, 1).midnight() - < SystemTime::from(ymd!(2019, 1, 1).with_hms_milli(0, 0, 0, 1)) + < SystemTime::from(ymd!(2019, 1, 1).try_with_hms(1, 0, 0).unwrap()) + ); + assert!( + ymd!(2019, 1, 1).midnight() + < SystemTime::from(ymd!(2019, 1, 1).try_with_hms(0, 1, 0).unwrap()) + ); + assert!( + ymd!(2019, 1, 1).midnight() + < SystemTime::from(ymd!(2019, 1, 1).try_with_hms(0, 0, 1).unwrap()) + ); + assert!( + ymd!(2019, 1, 1).midnight() + < SystemTime::from(ymd!(2019, 1, 1).try_with_hms_milli(0, 0, 0, 1).unwrap()) ); assert!(ymd!(2020, 1, 1).midnight() > SystemTime::from(ymd!(2019, 1, 1).midnight())); assert!(ymd!(2019, 2, 1).midnight() > SystemTime::from(ymd!(2019, 1, 1).midnight())); assert!(ymd!(2019, 1, 2).midnight() > SystemTime::from(ymd!(2019, 1, 1).midnight())); - assert!(ymd!(2019, 1, 1).with_hms(1, 0, 0) > SystemTime::from(ymd!(2019, 1, 1).midnight())); - assert!(ymd!(2019, 1, 1).with_hms(0, 1, 0) > SystemTime::from(ymd!(2019, 1, 1).midnight())); - assert!(ymd!(2019, 1, 1).with_hms(0, 0, 1) > SystemTime::from(ymd!(2019, 1, 1).midnight())); assert!( - ymd!(2019, 1, 1).with_hms_nano(0, 0, 0, 1) + ymd!(2019, 1, 1).try_with_hms(1, 0, 0).unwrap() + > SystemTime::from(ymd!(2019, 1, 1).midnight()) + ); + assert!( + ymd!(2019, 1, 1).try_with_hms(0, 1, 0).unwrap() + > SystemTime::from(ymd!(2019, 1, 1).midnight()) + ); + assert!( + ymd!(2019, 1, 1).try_with_hms(0, 0, 1).unwrap() + > SystemTime::from(ymd!(2019, 1, 1).midnight()) + ); + assert!( + ymd!(2019, 1, 1).try_with_hms_nano(0, 0, 0, 1).unwrap() > SystemTime::from(ymd!(2019, 1, 1).midnight()) ); } @@ -1433,21 +1705,39 @@ mod test { assert!(SystemTime::from(ymd!(2019, 1, 1).midnight()) < ymd!(2020, 1, 1).midnight()); assert!(SystemTime::from(ymd!(2019, 1, 1).midnight()) < ymd!(2019, 2, 1).midnight()); assert!(SystemTime::from(ymd!(2019, 1, 1).midnight()) < ymd!(2019, 1, 2).midnight()); - assert!(SystemTime::from(ymd!(2019, 1, 1).midnight()) < ymd!(2019, 1, 1).with_hms(1, 0, 0)); - assert!(SystemTime::from(ymd!(2019, 1, 1).midnight()) < ymd!(2019, 1, 1).with_hms(0, 1, 0)); - assert!(SystemTime::from(ymd!(2019, 1, 1).midnight()) < ymd!(2019, 1, 1).with_hms(0, 0, 1)); assert!( SystemTime::from(ymd!(2019, 1, 1).midnight()) - < ymd!(2019, 1, 1).with_hms_nano(0, 0, 0, 1) + < ymd!(2019, 1, 1).try_with_hms(1, 0, 0).unwrap() + ); + assert!( + SystemTime::from(ymd!(2019, 1, 1).midnight()) + < ymd!(2019, 1, 1).try_with_hms(0, 1, 0).unwrap() + ); + assert!( + SystemTime::from(ymd!(2019, 1, 1).midnight()) + < ymd!(2019, 1, 1).try_with_hms(0, 0, 1).unwrap() + ); + assert!( + SystemTime::from(ymd!(2019, 1, 1).midnight()) + < ymd!(2019, 1, 1).try_with_hms_nano(0, 0, 0, 1).unwrap() ); assert!(SystemTime::from(ymd!(2020, 1, 1).midnight()) > ymd!(2019, 1, 1).midnight()); assert!(SystemTime::from(ymd!(2019, 2, 1).midnight()) > ymd!(2019, 1, 1).midnight()); assert!(SystemTime::from(ymd!(2019, 1, 2).midnight()) > ymd!(2019, 1, 1).midnight()); - assert!(SystemTime::from(ymd!(2019, 1, 1).with_hms(1, 0, 0)) > ymd!(2019, 1, 1).midnight()); - assert!(SystemTime::from(ymd!(2019, 1, 1).with_hms(0, 1, 0)) > ymd!(2019, 1, 1).midnight()); - assert!(SystemTime::from(ymd!(2019, 1, 1).with_hms(0, 0, 1)) > ymd!(2019, 1, 1).midnight()); assert!( - SystemTime::from(ymd!(2019, 1, 1).with_hms_milli(0, 0, 0, 1)) + SystemTime::from(ymd!(2019, 1, 1).try_with_hms(1, 0, 0).unwrap()) + > ymd!(2019, 1, 1).midnight() + ); + assert!( + SystemTime::from(ymd!(2019, 1, 1).try_with_hms(0, 1, 0).unwrap()) + > ymd!(2019, 1, 1).midnight() + ); + assert!( + SystemTime::from(ymd!(2019, 1, 1).try_with_hms(0, 0, 1).unwrap()) + > ymd!(2019, 1, 1).midnight() + ); + assert!( + SystemTime::from(ymd!(2019, 1, 1).try_with_hms_milli(0, 0, 0, 1).unwrap()) > ymd!(2019, 1, 1).midnight() ); } diff --git a/src/time.rs b/src/time.rs index f4462bbb1..22721e331 100644 --- a/src/time.rs +++ b/src/time.rs @@ -45,7 +45,7 @@ impl Time { /// /// ```rust /// # use time::Time; - /// assert_eq!(Time::midnight(), Time::from_hms(0, 0, 0)); + /// assert_eq!(Time::midnight(), Time::try_from_hms(0, 0, 0).unwrap()); /// ``` #[inline(always)] pub const fn midnight() -> Self { @@ -397,8 +397,8 @@ impl Time { /// /// ```rust /// # use time::Time; - /// assert_eq!(Time::from_hms(0, 0, 0).hour(), 0); - /// assert_eq!(Time::from_hms(23, 59, 59).hour(), 23); + /// assert_eq!(Time::try_from_hms(0, 0, 0).unwrap().hour(), 0); + /// assert_eq!(Time::try_from_hms(23, 59, 59).unwrap().hour(), 23); /// ``` #[inline(always)] pub const fn hour(self) -> u8 { @@ -411,8 +411,8 @@ impl Time { /// /// ```rust /// # use time::Time; - /// assert_eq!(Time::from_hms(0, 0, 0).minute(), 0); - /// assert_eq!(Time::from_hms(23, 59, 59).minute(), 59); + /// assert_eq!(Time::try_from_hms(0, 0, 0).unwrap().minute(), 0); + /// assert_eq!(Time::try_from_hms(23, 59, 59).unwrap().minute(), 59); /// ``` #[inline(always)] pub const fn minute(self) -> u8 { @@ -425,8 +425,8 @@ impl Time { /// /// ```rust /// # use time::Time; - /// assert_eq!(Time::from_hms(0, 0, 0).second(), 0); - /// assert_eq!(Time::from_hms(23, 59, 59).second(), 59); + /// assert_eq!(Time::try_from_hms(0, 0, 0).unwrap().second(), 0); + /// assert_eq!(Time::try_from_hms(23, 59, 59).unwrap().second(), 59); /// ``` #[inline(always)] pub const fn second(self) -> u8 { @@ -439,8 +439,16 @@ impl Time { /// /// ```rust /// # use time::Time; - /// assert_eq!(Time::from_hms_milli(0, 0, 0, 0).millisecond(), 0); - /// assert_eq!(Time::from_hms_milli(23, 59, 59, 999).millisecond(), 999); + /// assert_eq!( + /// Time::try_from_hms_milli(0, 0, 0, 0).unwrap().millisecond(), + /// 0 + /// ); + /// assert_eq!( + /// Time::try_from_hms_milli(23, 59, 59, 999) + /// .unwrap() + /// .millisecond(), + /// 999 + /// ); /// ``` #[inline(always)] #[allow(clippy::cast_possible_truncation)] @@ -454,9 +462,14 @@ impl Time { /// /// ```rust /// # use time::Time; - /// assert_eq!(Time::from_hms_micro(0, 0, 0, 0).microsecond(), 0); /// assert_eq!( - /// Time::from_hms_micro(23, 59, 59, 999_999).microsecond(), + /// Time::try_from_hms_micro(0, 0, 0, 0).unwrap().microsecond(), + /// 0 + /// ); + /// assert_eq!( + /// Time::try_from_hms_micro(23, 59, 59, 999_999) + /// .unwrap() + /// .microsecond(), /// 999_999 /// ); /// ``` @@ -471,9 +484,11 @@ impl Time { /// /// ```rust /// # use time::Time; - /// assert_eq!(Time::from_hms_nano(0, 0, 0, 0).nanosecond(), 0); + /// assert_eq!(Time::try_from_hms_nano(0, 0, 0, 0).unwrap().nanosecond(), 0); /// assert_eq!( - /// Time::from_hms_nano(23, 59, 59, 999_999_999).nanosecond(), + /// Time::try_from_hms_nano(23, 59, 59, 999_999_999) + /// .unwrap() + /// .nanosecond(), /// 999_999_999 /// ); /// ``` @@ -513,7 +528,10 @@ impl Time { /// /// ```rust /// # use time::Time; - /// assert_eq!(Time::from_hms(0, 0, 0).format("%r"), "12:00:00 am"); + /// assert_eq!( + /// Time::try_from_hms(0, 0, 0).unwrap().format("%r"), + /// "12:00:00 am" + /// ); /// ``` #[inline(always)] pub fn format(self, format: &str) -> String { @@ -530,22 +548,25 @@ impl Time { /// /// ```rust /// # use time::Time; - /// assert_eq!(Time::parse("0:00:00", "%T"), Ok(Time::from_hms(0, 0, 0))); + /// assert_eq!( + /// Time::parse("0:00:00", "%T"), + /// Ok(Time::try_from_hms(0, 0, 0).unwrap()) + /// ); /// assert_eq!( /// Time::parse("23:59:59", "%T"), - /// Ok(Time::from_hms(23, 59, 59)) + /// Ok(Time::try_from_hms(23, 59, 59).unwrap()) /// ); /// assert_eq!( /// Time::parse("12:00:00 am", "%r"), - /// Ok(Time::from_hms(0, 0, 0)) + /// Ok(Time::try_from_hms(0, 0, 0).unwrap()) /// ); /// assert_eq!( /// Time::parse("12:00:00 pm", "%r"), - /// Ok(Time::from_hms(12, 0, 0)) + /// Ok(Time::try_from_hms(12, 0, 0).unwrap()) /// ); /// assert_eq!( /// Time::parse("11:59:59 pm", "%r"), - /// Ok(Time::from_hms(23, 59, 59)) + /// Ok(Time::try_from_hms(23, 59, 59).unwrap()) /// ); /// ``` #[inline(always)] @@ -607,12 +628,12 @@ impl Add for Time { /// ```rust /// # use time::{Duration, Time}; /// assert_eq!( - /// Time::from_hms(12, 0, 0) + Duration::hours(2), - /// Time::from_hms(14, 0, 0) + /// Time::try_from_hms(12, 0, 0).unwrap() + Duration::hours(2), + /// Time::try_from_hms(14, 0, 0).unwrap() /// ); /// assert_eq!( - /// Time::from_hms(0, 0, 1) + Duration::seconds(-2), - /// Time::from_hms(23, 59, 59) + /// Time::try_from_hms(0, 0, 1).unwrap() + Duration::seconds(-2), + /// Time::try_from_hms(23, 59, 59).unwrap() /// ); /// ``` #[inline(always)] @@ -638,12 +659,12 @@ impl Add for Time { /// # use time::Time; /// # use core::time::Duration; /// assert_eq!( - /// Time::from_hms(12, 0, 0) + Duration::from_secs(2 * 3_600), - /// Time::from_hms(14, 0, 0) + /// Time::try_from_hms(12, 0, 0).unwrap() + Duration::from_secs(2 * 3_600), + /// Time::try_from_hms(14, 0, 0).unwrap() /// ); /// assert_eq!( - /// Time::from_hms(23, 59, 59) + Duration::from_secs(2), - /// Time::from_hms(0, 0, 1) + /// Time::try_from_hms(23, 59, 59).unwrap() + Duration::from_secs(2), + /// Time::try_from_hms(0, 0, 1).unwrap() /// ); /// ``` #[inline(always)] @@ -658,13 +679,13 @@ impl AddAssign for Time { /// /// ```rust /// # use time::{Duration, Time}; - /// let mut time = Time::from_hms(12, 0, 0); + /// let mut time = Time::try_from_hms(12, 0, 0).unwrap(); /// time += Duration::hours(2); - /// assert_eq!(time, Time::from_hms(14, 0, 0)); + /// assert_eq!(time, Time::try_from_hms(14, 0, 0).unwrap()); /// - /// let mut time = Time::from_hms(0, 0, 1); + /// let mut time = Time::try_from_hms(0, 0, 1).unwrap(); /// time += Duration::seconds(-2); - /// assert_eq!(time, Time::from_hms(23, 59, 59)); + /// assert_eq!(time, Time::try_from_hms(23, 59, 59).unwrap()); /// ``` #[inline(always)] fn add_assign(&mut self, duration: Duration) { @@ -679,13 +700,13 @@ impl AddAssign for Time { /// ```rust /// # use time::Time; /// # use core::time::Duration; - /// let mut time = Time::from_hms(12, 0, 0); + /// let mut time = Time::try_from_hms(12, 0, 0).unwrap(); /// time += Duration::from_secs(2 * 3_600); - /// assert_eq!(time, Time::from_hms(14, 0, 0)); + /// assert_eq!(time, Time::try_from_hms(14, 0, 0).unwrap()); /// - /// let mut time = Time::from_hms(23, 59, 59); + /// let mut time = Time::try_from_hms(23, 59, 59).unwrap(); /// time += Duration::from_secs(2); - /// assert_eq!(time, Time::from_hms(0, 0, 1)); + /// assert_eq!(time, Time::try_from_hms(0, 0, 1).unwrap()); /// ``` #[inline(always)] fn add_assign(&mut self, duration: StdDuration) { @@ -702,12 +723,12 @@ impl Sub for Time { /// ```rust /// # use time::{Duration, Time}; /// assert_eq!( - /// Time::from_hms(14, 0, 0) - Duration::hours(2), - /// Time::from_hms(12, 0, 0) + /// Time::try_from_hms(14, 0, 0).unwrap() - Duration::hours(2), + /// Time::try_from_hms(12, 0, 0).unwrap() /// ); /// assert_eq!( - /// Time::from_hms(23, 59, 59) - Duration::seconds(-2), - /// Time::from_hms(0, 0, 1) + /// Time::try_from_hms(23, 59, 59).unwrap() - Duration::seconds(-2), + /// Time::try_from_hms(0, 0, 1).unwrap() /// ); /// ``` #[inline(always)] @@ -726,12 +747,12 @@ impl Sub for Time { /// # use time::Time; /// # use core::time::Duration; /// assert_eq!( - /// Time::from_hms(14, 0, 0) - Duration::from_secs(2 * 3_600), - /// Time::from_hms(12, 0, 0) + /// Time::try_from_hms(14, 0, 0).unwrap() - Duration::from_secs(2 * 3_600), + /// Time::try_from_hms(12, 0, 0).unwrap() /// ); /// assert_eq!( - /// Time::from_hms(0, 0, 1) - Duration::from_secs(2), - /// Time::from_hms(23, 59, 59) + /// Time::try_from_hms(0, 0, 1).unwrap() - Duration::from_secs(2), + /// Time::try_from_hms(23, 59, 59).unwrap() /// ); /// ``` #[inline(always)] @@ -746,13 +767,13 @@ impl SubAssign for Time { /// /// ```rust /// # use time::{Duration, Time}; - /// let mut time = Time::from_hms(14, 0, 0); + /// let mut time = Time::try_from_hms(14, 0, 0).unwrap(); /// time -= Duration::hours(2); - /// assert_eq!(time, Time::from_hms(12, 0, 0)); + /// assert_eq!(time, Time::try_from_hms(12, 0, 0).unwrap()); /// - /// let mut time = Time::from_hms(23, 59, 59); + /// let mut time = Time::try_from_hms(23, 59, 59).unwrap(); /// time -= Duration::seconds(-2); - /// assert_eq!(time, Time::from_hms(0, 0, 1)); + /// assert_eq!(time, Time::try_from_hms(0, 0, 1).unwrap()); /// ``` #[inline(always)] fn sub_assign(&mut self, duration: Duration) { @@ -767,13 +788,13 @@ impl SubAssign for Time { /// ```rust /// # use time::Time; /// # use core::time::Duration; - /// let mut time = Time::from_hms(14, 0, 0); + /// let mut time = Time::try_from_hms(14, 0, 0).unwrap(); /// time -= Duration::from_secs(2 * 3_600); - /// assert_eq!(time, Time::from_hms(12, 0, 0)); + /// assert_eq!(time, Time::try_from_hms(12, 0, 0).unwrap()); /// - /// let mut time = Time::from_hms(0, 0, 1); + /// let mut time = Time::try_from_hms(0, 0, 1).unwrap(); /// time -= Duration::from_secs(2); - /// assert_eq!(time, Time::from_hms(23, 59, 59)); + /// assert_eq!(time, Time::try_from_hms(23, 59, 59).unwrap()); /// ``` #[inline(always)] fn sub_assign(&mut self, duration: StdDuration) { @@ -790,19 +811,19 @@ impl Sub