calends/interval/
iter.rs

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}