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