Lines Matching +full:not +full:- +full:date
3 /// Release date including year, month, and day.
6 pub struct Date(u32); struct
8 impl Date { impl
9 /// Reads the release date of the running compiler. If it cannot be
10 /// determined (see the [top-level documentation](crate)), returns `None`.
15 /// use version_check::Date;
17 /// match Date::read() {
18 /// Some(d) => format!("The release date is: {}", d),
19 /// None => format!("Failed to read the release date.")
22 pub fn read() -> Option<Date> { in read()
24 .and_then(|(_, date)| date) in read()
25 .and_then(|date| Date::parse(&date)) in read()
28 /// Parse a release date of the form `%Y-%m-%d`. Returns `None` if `date` is
29 /// not in `%Y-%m-%d` format.
34 /// use version_check::Date;
36 /// let date = Date::parse("2016-04-20").unwrap();
38 /// assert!(date.at_least("2016-01-10"));
39 /// assert!(date.at_most("2016-04-20"));
40 /// assert!(date.exactly("2016-04-20"));
42 /// assert!(Date::parse("2021-12-31").unwrap().exactly("2021-12-31"));
44 /// assert!(Date::parse("March 13, 2018").is_none());
45 /// assert!(Date::parse("1-2-3-4-5").is_none());
46 /// assert!(Date::parse("2020-300-23120").is_none());
47 /// assert!(Date::parse("2020-12-12 1").is_none());
48 /// assert!(Date::parse("2020-10").is_none());
49 /// assert!(Date::parse("2020").is_none());
51 pub fn parse(date: &str) -> Option<Date> { in parse() argument
53 for (i, split) in date.split('-').map(|s| s.parse::<u16>()).enumerate() { in parse()
65 Some(Date::from_ymd(year, month as u8, day as u8)) in parse()
68 /// Creates a `Date` from `(year, month, day)` date components.
70 /// Does not check the validity of `year`, `month`, or `day`, but `year` is
77 /// use version_check::Date;
79 /// assert!(Date::from_ymd(2021, 7, 30).exactly("2021-07-30"));
80 /// assert!(Date::from_ymd(2010, 3, 23).exactly("2010-03-23"));
81 /// assert!(Date::from_ymd(2090, 1, 31).exactly("2090-01-31"));
84 /// assert!(Date::from_ymd(2090, 1, 33).exactly("2090-01-01"));
86 pub fn from_ymd(year: u16, month: u8, day: u8) -> Date { in from_ymd() argument
90 Date(year | month | day) in from_ymd()
94 fn to_ymd(&self) -> (u16, u8, u8) { in to_ymd()
101 /// Returns `true` if `self` occurs on or after `date`.
103 /// If `date` occurs before `self`, or if `date` is not in `%Y-%m-%d`
109 /// use version_check::Date;
111 /// let date = Date::parse("2020-01-01").unwrap();
113 /// assert!(date.at_least("2019-12-31"));
114 /// assert!(date.at_least("2020-01-01"));
115 /// assert!(date.at_least("2014-04-31"));
117 /// assert!(!date.at_least("2020-01-02"));
118 /// assert!(!date.at_least("2024-08-18"));
120 pub fn at_least(&self, date: &str) -> bool { in at_least()
121 Date::parse(date) in at_least()
122 .map(|date| self >= &date) in at_least()
126 /// Returns `true` if `self` occurs on or before `date`.
128 /// If `date` occurs after `self`, or if `date` is not in `%Y-%m-%d`
134 /// use version_check::Date;
136 /// let date = Date::parse("2020-01-01").unwrap();
138 /// assert!(date.at_most("2020-01-01"));
139 /// assert!(date.at_most("2020-01-02"));
140 /// assert!(date.at_most("2024-08-18"));
142 /// assert!(!date.at_most("2019-12-31"));
143 /// assert!(!date.at_most("2014-04-31"));
145 pub fn at_most(&self, date: &str) -> bool { in at_most()
146 Date::parse(date) in at_most()
147 .map(|date| self <= &date) in at_most()
151 /// Returns `true` if `self` occurs exactly on `date`.
153 /// If `date` is not exactly `self`, or if `date` is not in `%Y-%m-%d`
159 /// use version_check::Date;
161 /// let date = Date::parse("2020-01-01").unwrap();
163 /// assert!(date.exactly("2020-01-01"));
165 /// assert!(!date.exactly("2019-12-31"));
166 /// assert!(!date.exactly("2014-04-31"));
167 /// assert!(!date.exactly("2020-01-02"));
168 /// assert!(!date.exactly("2024-08-18"));
170 pub fn exactly(&self, date: &str) -> bool { in exactly()
171 Date::parse(date) in exactly()
172 .map(|date| self == &date) in exactly()
177 impl fmt::Display for Date { implementation
178 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { in fmt()
180 write!(f, "{}-{:02}-{:02}", y, m, d) in fmt()
186 use super::Date;
190 assert_eq!(Date::parse($string).unwrap().to_string(), $string);
196 reflexive_display!("2019-05-08"); in display()
197 reflexive_display!("2000-01-01"); in display()
198 reflexive_display!("2000-12-31"); in display()
199 reflexive_display!("2090-12-31"); in display()
200 reflexive_display!("1999-02-19"); in display()
201 reflexive_display!("9999-12-31"); in display()