Skip to content

Commit f8a2cb4

Browse files
authored
fix!: rename SeriesRange to DateTimeRange and move it (#31)
1 parent 083a4a4 commit f8a2cb4

12 files changed

Lines changed: 68 additions & 68 deletions

File tree

src/lib.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ extern crate alloc;
88
mod error;
99
mod event;
1010
pub mod pattern;
11+
mod range;
1112
pub mod series;
1213

1314
use core::ops::{Bound, Range, RangeBounds, RangeFrom, RangeInclusive, RangeTo, RangeToInclusive};
@@ -16,8 +17,9 @@ pub use event::Event;
1617
use jiff::civil::{Date, DateTime, time};
1718
use jiff::{ToSpan, Zoned};
1819
use pattern::Combined;
20+
pub use range::DateTimeRange;
1921
#[doc(inline)]
20-
pub use series::{Series, SeriesRange};
22+
pub use series::Series;
2123

2224
mod private {
2325
pub trait Sealed {}
@@ -41,20 +43,20 @@ pub trait Pattern: private::Sealed + Clone {
4143
/// This must always returns a datetime that is strictly larger than `instant` or `None` if
4244
/// the next event would be greater or equal to the range's end. If `instant` happens before
4345
/// the range's start, this must return the first event within the range.
44-
fn next_after(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime>;
46+
fn next_after(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime>;
4547

4648
/// Find the previous `DateTime` before `instant` within a range.
4749
///
4850
/// This must always returns a datetime that is strictly smaller than `instant` or `None` if
4951
/// the previous event would be less than the range's start. If `instant` happens after
5052
/// the range's end, this must return the last event within the range.
51-
fn previous_before(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime>;
53+
fn previous_before(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime>;
5254

5355
/// Find a `DateTime` closest to `instant` within a range.
5456
///
5557
/// The returned datetime may happen before, after and exactly at `instant`. This must only
5658
/// return `None` if there is no event within the range.
57-
fn closest_to(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime>;
59+
fn closest_to(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime>;
5860
}
5961

6062
/// A trait for combining values implementing [`Pattern`] into more complex recurrence patterns.

src/pattern/combined.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::pattern::utils::{closest_to, pick_best};
2-
use crate::{Pattern, SeriesRange, private};
2+
use crate::{DateTimeRange, Pattern, private};
33
use core::cmp::Ord;
44
use jiff::civil::DateTime;
55

@@ -36,19 +36,19 @@ where
3636
L: Pattern,
3737
R: Pattern,
3838
{
39-
fn next_after(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime> {
39+
fn next_after(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime> {
4040
let left = self.left.next_after(instant, range);
4141
let right = self.right.next_after(instant, range);
4242
pick_best(left, right, Ord::min)
4343
}
4444

45-
fn previous_before(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime> {
45+
fn previous_before(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime> {
4646
let left = self.left.previous_before(instant, range);
4747
let right = self.right.previous_before(instant, range);
4848
pick_best(left, right, Ord::max)
4949
}
5050

51-
fn closest_to(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime> {
51+
fn closest_to(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime> {
5252
let left = self.left.closest_to(instant, range);
5353
let right = self.right.closest_to(instant, range);
5454
pick_best(left, right, |left, right| closest_to(instant, left, right))

src/pattern/cron.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use super::ranged::{Days, Hours, Minutes, Months, Seconds, Weekdays, Years};
2-
use crate::{Error, Pattern, SeriesRange, private};
2+
use crate::{DateTimeRange, Error, Pattern, private};
33
use core::ops::RangeBounds;
44
use jiff::ToSpan;
55
use jiff::civil::{DateTime, Weekday};
@@ -686,7 +686,7 @@ impl Cron {
686686
}
687687

688688
impl Cron {
689-
fn next_after_or_current(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime> {
689+
fn next_after_or_current(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime> {
690690
let mut clamp = DateTimeClamp::new(instant);
691691

692692
for year in self.years.range(clamp.year..=Years::MAX) {
@@ -765,7 +765,7 @@ impl Cron {
765765
fn previous_before_or_current(
766766
&self,
767767
instant: DateTime,
768-
range: SeriesRange,
768+
range: DateTimeRange,
769769
) -> Option<DateTime> {
770770
let mut clamp = DateTimeClamp::new(instant);
771771

@@ -839,12 +839,12 @@ impl Cron {
839839
}
840840

841841
impl Pattern for Cron {
842-
fn next_after(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime> {
842+
fn next_after(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime> {
843843
let instant = instant.checked_add(1.second()).ok()?;
844844
self.next_after_or_current(instant, range)
845845
}
846846

847-
fn previous_before(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime> {
847+
fn previous_before(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime> {
848848
let instant = if instant.subsec_nanosecond() > 0 {
849849
instant
850850
} else {
@@ -853,7 +853,7 @@ impl Pattern for Cron {
853853
self.previous_before_or_current(instant, range)
854854
}
855855

856-
fn closest_to(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime> {
856+
fn closest_to(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime> {
857857
let instant = instant.max(range.start).min(range.end);
858858

859859
let Some(next) = self.next_after_or_current(instant, range) else {

src/pattern/daily.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::pattern::Interval;
2-
use crate::{Error, Pattern, SeriesRange, private};
2+
use crate::{DateTimeRange, Error, Pattern, private};
33
use jiff::{
44
ToSpan,
55
civil::{DateTime, Time},
@@ -86,9 +86,9 @@ impl Daily {
8686
self
8787
}
8888

89-
fn range_adjusted<F>(&self, f: F, instant: DateTime, range: SeriesRange) -> Option<DateTime>
89+
fn range_adjusted<F>(&self, f: F, instant: DateTime, range: DateTimeRange) -> Option<DateTime>
9090
where
91-
F: FnOnce(&Interval, DateTime, SeriesRange) -> Option<DateTime>,
91+
F: FnOnce(&Interval, DateTime, DateTimeRange) -> Option<DateTime>,
9292
{
9393
let Some(time) = self.at else {
9494
return f(&self.interval, instant, range);
@@ -101,22 +101,22 @@ impl Daily {
101101
};
102102

103103
let start = start.with().time(time).build().ok()?;
104-
let range = SeriesRange::from(start..range.end);
104+
let range = DateTimeRange::from(start..range.end);
105105

106106
f(&self.interval, instant, range)
107107
}
108108
}
109109

110110
impl Pattern for Daily {
111-
fn next_after(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime> {
111+
fn next_after(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime> {
112112
self.range_adjusted(Interval::next_after, instant, range)
113113
}
114114

115-
fn previous_before(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime> {
115+
fn previous_before(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime> {
116116
self.range_adjusted(Interval::previous_before, instant, range)
117117
}
118118

119-
fn closest_to(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime> {
119+
fn closest_to(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime> {
120120
self.range_adjusted(Interval::closest_to, instant, range)
121121
}
122122
}

src/pattern/interval.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::error::{Error, err};
22
use crate::pattern::utils::{advance_by_until, closest_to, pick_best};
3-
use crate::{Pattern, SeriesRange, private};
3+
use crate::{DateTimeRange, Pattern, private};
44
use jiff::{Span, civil::DateTime};
55

66
/// A fixed interval recurrence pattern.
@@ -132,7 +132,7 @@ impl Interval {
132132
}
133133

134134
impl Pattern for Interval {
135-
fn next_after(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime> {
135+
fn next_after(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime> {
136136
let start = self.add_offset(range.start)?;
137137
if start >= range.end {
138138
return None;
@@ -172,7 +172,7 @@ impl Pattern for Interval {
172172
.filter(|&next| next < range.end)
173173
}
174174

175-
fn previous_before(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime> {
175+
fn previous_before(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime> {
176176
let start = self.add_offset(range.start)?;
177177
if instant <= start || start >= range.end {
178178
return None;
@@ -189,7 +189,7 @@ impl Pattern for Interval {
189189
.filter(|&prev| prev >= start)
190190
}
191191

192-
fn closest_to(&self, instant: DateTime, range: SeriesRange) -> Option<DateTime> {
192+
fn closest_to(&self, instant: DateTime, range: DateTimeRange) -> Option<DateTime> {
193193
let start = self.add_offset(range.start)?;
194194
if start >= range.end {
195195
return None;
Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use jiff::civil::DateTime;
99
/// instantiate values of this type unless you want to interact with methods of the `Pattern` trait
1010
/// directly.
1111
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12-
pub struct SeriesRange {
12+
pub struct DateTimeRange {
1313
/// The lower bound of the series (inclusive).
1414
pub(crate) start: DateTime,
1515
/// The upper bound of the series (exclusive).
@@ -21,11 +21,11 @@ pub struct SeriesRange {
2121
pub(crate) fixpoint: Option<DateTime>,
2222
}
2323

24-
impl SeriesRange {
25-
/// Creates a new `SeriesRange` from a start (inclusive) and an end (exclusive).
24+
impl DateTimeRange {
25+
/// Creates a new `DateTimeRange` from a start (inclusive) and an end (exclusive).
2626
#[inline]
27-
pub(crate) const fn new(start: DateTime, end: DateTime) -> SeriesRange {
28-
SeriesRange {
27+
pub(crate) const fn new(start: DateTime, end: DateTime) -> DateTimeRange {
28+
DateTimeRange {
2929
start,
3030
end,
3131
fixpoint: None,
@@ -41,7 +41,7 @@ impl SeriesRange {
4141
///
4242
/// Returns an error if `fixpoint` is greater than the range start.
4343
#[inline]
44-
pub(crate) fn with_fixpoint(mut self, fixpoint: DateTime) -> Result<SeriesRange, Error> {
44+
pub(crate) fn with_fixpoint(mut self, fixpoint: DateTime) -> Result<DateTimeRange, Error> {
4545
if fixpoint > self.start {
4646
return Err(err!(
4747
"fixpoint ({fixpoint}) must be less than or equal to range start ({})",
@@ -54,8 +54,8 @@ impl SeriesRange {
5454

5555
/// Returns the (inclusive) fixpoint for relative recurrence patterns.
5656
///
57-
/// Unless [`SeriesRange::with_fixpoint`] was called with a specific value, this returns the
58-
/// same value as [`SeriesRange::start`].
57+
/// Unless [`DateTimeRange::with_fixpoint`] was called with a specific value, this returns the
58+
/// same value as [`DateTimeRange::start`].
5959
#[inline]
6060
pub(crate) fn fixpoint(&self) -> DateTime {
6161
self.fixpoint.unwrap_or(self.start)
@@ -74,7 +74,7 @@ impl SeriesRange {
7474
}
7575
}
7676

77-
impl RangeBounds<DateTime> for SeriesRange {
77+
impl RangeBounds<DateTime> for DateTimeRange {
7878
fn start_bound(&self) -> Bound<&DateTime> {
7979
Bound::Included(&self.start)
8080
}
@@ -84,14 +84,14 @@ impl RangeBounds<DateTime> for SeriesRange {
8484
}
8585
}
8686

87-
impl From<SeriesRange> for Range<DateTime> {
88-
fn from(range: SeriesRange) -> Self {
87+
impl From<DateTimeRange> for Range<DateTime> {
88+
fn from(range: DateTimeRange) -> Self {
8989
range.start..range.end
9090
}
9191
}
9292

93-
impl From<Range<DateTime>> for SeriesRange {
93+
impl From<Range<DateTime>> for DateTimeRange {
9494
fn from(range: Range<DateTime>) -> Self {
95-
SeriesRange::new(range.start, range.end)
95+
DateTimeRange::new(range.start, range.end)
9696
}
9797
}

src/series/mod.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
//! A series of recurring events.
22
mod iter;
3-
mod range;
43
mod split;
54
mod with;
65

76
pub use iter::Iter;
8-
pub use range::SeriesRange;
97
pub use split::{SeriesSplit, SplitMode};
108
pub use with::SeriesWith;
119

1210
use crate::error::Error;
13-
use crate::{Event, Pattern, try_simplify_range};
11+
use crate::{DateTimeRange, Event, Pattern, try_simplify_range};
1412
use core::ops::RangeBounds;
1513
use jiff::{Span, civil::DateTime};
1614

@@ -37,7 +35,7 @@ use jiff::{Span, civil::DateTime};
3735
#[derive(Debug, Clone)]
3836
pub struct Series<P> {
3937
pattern: P,
40-
range: SeriesRange,
38+
range: DateTimeRange,
4139
event_duration: Span,
4240
}
4341

src/series/with.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::error::{Error, err};
2-
use crate::series::{Series, SeriesRange};
2+
use crate::series::{DateTimeRange, Series};
33
use crate::{IntoBounds, Pattern, try_simplify_range};
44
use core::ops::{Bound, RangeBounds};
55
use jiff::{Span, civil::DateTime};
@@ -253,7 +253,7 @@ where
253253
}
254254

255255
let range = if let Some(fixpoint) = self.fixpoint {
256-
SeriesRange::from(range).with_fixpoint(fixpoint)?
256+
DateTimeRange::from(range).with_fixpoint(fixpoint)?
257257
} else {
258258
range.into()
259259
};

tests/combined_test.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use common::{series_take, series_take_rev};
44
use jiff::civil::{DateTime, date};
55
use pretty_assertions::assert_eq;
66
use recurring::pattern::{cron, hourly};
7-
use recurring::{Combine, Event, Pattern, SeriesRange};
7+
use recurring::{Combine, DateTimeRange, Event, Pattern};
88

99
#[test]
1010
fn combined() {
@@ -54,7 +54,7 @@ fn combined() {
5454
fn combined_closest_to() {
5555
let start = date(2025, 1, 1).at(12, 0, 0, 0);
5656
let end = date(2025, 12, 31).at(12, 0, 0, 0);
57-
let range = SeriesRange::from(start..end);
57+
let range = DateTimeRange::from(start..end);
5858
let pattern = cron()
5959
.hour(10)
6060
.minute(30)

tests/cron_test.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use common::{series_take, series_take_rev};
44
use jiff::civil::{DateTime, Weekday, date};
55
use pretty_assertions::assert_eq;
66
use recurring::pattern::{Cron, cron};
7-
use recurring::{Event, Pattern, SeriesRange};
7+
use recurring::{DateTimeRange, Event, Pattern};
88

99
#[test]
1010
fn cron_default() {
@@ -96,7 +96,7 @@ fn cron_weekdays() {
9696

9797
#[test]
9898
fn cron_next_after() {
99-
let range = SeriesRange::from(DateTime::MIN..DateTime::MAX);
99+
let range = DateTimeRange::from(DateTime::MIN..DateTime::MAX);
100100
let pattern = Cron::new().minute(3).second(5).second(10);
101101

102102
assert_eq!(
@@ -117,7 +117,7 @@ fn cron_next_after() {
117117

118118
#[test]
119119
fn cron_previous_before() {
120-
let range = SeriesRange::from(DateTime::MIN..DateTime::MAX);
120+
let range = DateTimeRange::from(DateTime::MIN..DateTime::MAX);
121121
let pattern = Cron::new().minute(3).seconds([5, 10]);
122122

123123
assert_eq!(
@@ -138,7 +138,7 @@ fn cron_previous_before() {
138138

139139
#[test]
140140
fn cron_closest_to() {
141-
let range = SeriesRange::from(DateTime::MIN..DateTime::MAX);
141+
let range = DateTimeRange::from(DateTime::MIN..DateTime::MAX);
142142
let pattern = Cron::new().hour(1).minute(30).second(0);
143143

144144
assert_eq!(
@@ -164,7 +164,7 @@ fn cron_closest_to() {
164164

165165
#[test]
166166
fn cron_closest_to_datetime_max() {
167-
let range = SeriesRange::from(DateTime::MIN..DateTime::MAX);
167+
let range = DateTimeRange::from(DateTime::MIN..DateTime::MAX);
168168
let pattern = Cron::new().hour(1).minute(30).second(0);
169169

170170
assert_eq!(

0 commit comments

Comments
 (0)