calends/interval/
marker.rs1use chrono::NaiveDate;
2
3use crate::IntervalLike;
4
5pub trait Start: IntervalLike {
6 fn start(&self) -> NaiveDate {
7 self.start_opt().unwrap()
8 }
9}
10
11pub trait End: IntervalLike {
12 fn end(&self) -> NaiveDate {
13 self.end_opt().unwrap()
14 }
15}
16
17#[cfg(test)]
18mod tests {
19 use crate::{interval::marker, Interval, RelativeDuration, UnboundedStartInterval};
20
21 use super::*;
22
23 #[test]
24 fn test_all_intervals() {
25 let i1 = UnboundedStartInterval::new(NaiveDate::from_ymd(2022, 1, 1));
26 let i2 = Interval::from_start(NaiveDate::from_ymd(2022, 1, 1), RelativeDuration::days(2));
27
28 fn interval<I: IntervalLike + marker::End>(interval: I) -> (Option<NaiveDate>, NaiveDate) {
29 (interval.start_opt(), interval.end())
30 }
31
32 let i1 = interval(i1);
33 assert_eq!(i1.0, None);
34 assert_eq!(i1.1, NaiveDate::from_ymd(2022, 1, 1));
35
36 let i2 = interval(i2);
37 assert_eq!(i2.0, Some(NaiveDate::from_ymd(2022, 1, 1)));
38 assert_eq!(i2.1, NaiveDate::from_ymd(2022, 1, 2));
39 }
40}