1use chrono::NaiveDate;
2
3use crate::Interval;
4
5use super::marker::End;
6
7#[derive(Debug, Clone)]
8pub struct UntilAfter<T>
9where
10 T: Iterator<Item = Interval>,
11{
12 iter: T,
13 until: NaiveDate,
14}
15
16impl<T> UntilAfter<T>
17where
18 T: Iterator<Item = Interval>,
19{
20 pub fn new(iter: T, until: NaiveDate) -> Self {
21 UntilAfter { iter, until }
22 }
23}
24
25impl<T> Iterator for UntilAfter<T>
26where
27 T: Iterator<Item = Interval>,
28{
29 type Item = Interval;
30
31 fn next(&mut self) -> Option<Self::Item> {
32 match self.iter.next() {
33 Some(item) => {
34 if item.end() >= self.until {
35 None
36 } else {
37 Some(item)
38 }
39 }
40 None => None,
41 }
42 }
43}