Skip to content

Commit caa3e59

Browse files
authored
Merge branch 'main' into fix/calendar-until-arithmetic
2 parents 431b775 + 3d3a4ac commit caa3e59

File tree

17 files changed

+61
-53
lines changed

17 files changed

+61
-53
lines changed

components/calendar/benches/until.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
use criterion::{
66
black_box, criterion_group, criterion_main, measurement::WallTime, BenchmarkGroup, Criterion,
77
};
8-
use icu_calendar::options::DateDifferenceOptions;
9-
use icu_calendar::types::{DateDurationUnit, RataDie};
8+
use icu_calendar::options::{DateDifferenceOptions, DateDurationUnit};
9+
use icu_calendar::types::RataDie;
1010
use icu_calendar::{Calendar, Date};
1111

1212
#[macro_use]

components/calendar/fuzz/fuzz_targets/until.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ pub enum DateDurationUnit {
2828
Days,
2929
}
3030

31-
impl From<DateDurationUnit> for icu_calendar::types::DateDurationUnit {
31+
impl From<DateDurationUnit> for icu_calendar::options::DateDurationUnit {
3232
fn from(other: DateDurationUnit) -> Self {
3333
match other {
3434
DateDurationUnit::Years => Self::Years,

components/calendar/src/calendar_arithmetic.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44

55
use calendrical_calculations::rata_die::RataDie;
66

7-
use crate::duration::{DateDuration, DateDurationUnit};
7+
use crate::duration::DateDuration;
88
use crate::error::{
99
range_check, DateAddError, DateFromFieldsError, EcmaReferenceYearError, LunisolarDateError,
1010
MonthCodeParseError, MonthError, UnknownEraError,
1111
};
12-
use crate::options::{DateAddOptions, DateDifferenceOptions};
12+
use crate::options::{DateAddOptions, DateDifferenceOptions, DateDurationUnit};
1313
use crate::options::{DateFromFieldsOptions, MissingFieldsStrategy, Overflow};
1414
use crate::types::{DateFields, Month};
1515
use crate::{types, Calendar, DateError, RangeError};

components/calendar/src/duration.rs

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use crate::error::DateDurationParseError;
2020
/// ```rust
2121
/// use icu::calendar::options::DateDifferenceOptions;
2222
/// use icu::calendar::types::DateDuration;
23-
/// use icu::calendar::types::DateDurationUnit;
23+
/// use icu::calendar::options::DateDurationUnit;
2424
/// use icu::calendar::types::Weekday;
2525
/// use icu::calendar::Date;
2626
///
@@ -135,30 +135,6 @@ pub struct DateDuration {
135135
pub days: u64,
136136
}
137137

138-
/// A "duration unit" used to specify the minimum or maximum duration of time to
139-
/// care about
140-
///
141-
/// <div class="stab unstable">
142-
/// 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
143-
/// including in SemVer minor releases. Do not use this type unless you are prepared for things to occasionally break.
144-
///
145-
/// Graduation tracking issue: [issue #3964](https://github.com/unicode-org/icu4x/issues/3964).
146-
/// </div>
147-
///
148-
/// ✨ *Enabled with the `unstable` Cargo feature.*
149-
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
150-
#[allow(clippy::exhaustive_enums)] // this type should be stable
151-
pub enum DateDurationUnit {
152-
/// Duration in years
153-
Years,
154-
/// Duration in months
155-
Months,
156-
/// Duration in weeks
157-
Weeks,
158-
/// Duration in days
159-
Days,
160-
}
161-
162138
impl DateDuration {
163139
/// Parses an ISO 8601 date-only duration string into a [`DateDuration`].
164140
///

components/calendar/src/error.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ mod unstable {
570570
/// use icu::calendar::error::MismatchedCalendarError;
571571
/// use icu::calendar::Date;
572572
/// use icu::calendar::options::DateDifferenceOptions;
573-
/// use icu::calendar::types::DateDurationUnit;
573+
/// use icu::calendar::options::DateDurationUnit;
574574
///
575575
/// let d1 = Date::try_new_gregorian(2000, 1, 1).unwrap().to_any();
576576
/// let d2 = Date::try_new_persian(1562, 1, 1).unwrap().to_any();

components/calendar/src/options.rs

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
77
#[cfg(feature = "unstable")]
88
pub use unstable::{
9-
DateAddOptions, DateDifferenceOptions, DateFromFieldsOptions, MissingFieldsStrategy, Overflow,
9+
DateAddOptions, DateDifferenceOptions, DateDurationUnit, DateFromFieldsOptions,
10+
MissingFieldsStrategy, Overflow,
1011
};
1112
#[cfg(not(feature = "unstable"))]
1213
pub(crate) use unstable::{
13-
DateAddOptions, DateDifferenceOptions, DateFromFieldsOptions, MissingFieldsStrategy, Overflow,
14+
DateAddOptions, DateDifferenceOptions, DateDurationUnit, DateFromFieldsOptions,
15+
MissingFieldsStrategy, Overflow,
1416
};
1517

1618
mod unstable {
@@ -177,12 +179,15 @@ mod unstable {
177179
/// associative or commutative in subsequent arithmetic operations, and it might require
178180
/// [`Overflow::Constrain`] in addition.
179181
///
182+
/// The resultant duration will not have any `weeks` value unless [`DateDurationUnit::Weeks`]
183+
/// is explicitly specified as `largest_unit`.
184+
///
180185
/// # Examples
181186
///
182187
/// ```
183188
/// use icu::calendar::options::DateDifferenceOptions;
184189
/// use icu::calendar::types::DateDuration;
185-
/// use icu::calendar::types::DateDurationUnit;
190+
/// use icu::calendar::options::DateDurationUnit;
186191
/// use icu::calendar::Date;
187192
///
188193
/// let d1 = Date::try_new_iso(2025, 3, 31).unwrap();
@@ -206,6 +211,7 @@ mod unstable {
206211
/// assert_eq!(
207212
/// d1.try_until_with_options(&d2, options_weeks).unwrap(),
208213
/// DateDuration {
214+
/// // This is the only time there is a `weeks` value.
209215
/// weeks: 58,
210216
/// days: 4,
211217
/// ..Default::default()
@@ -236,10 +242,10 @@ mod unstable {
236242
/// );
237243
/// ```
238244
///
239-
/// [`Months`]: crate::types::DateDurationUnit::Months
240-
/// [`Years`]: crate::types::DateDurationUnit::Years
245+
/// [`Months`]: crate::options::DateDurationUnit::Months
246+
/// [`Years`]: crate::options::DateDurationUnit::Years
241247
/// [`DateDuration`]: crate::types::DateDuration
242-
pub largest_unit: Option<crate::duration::DateDurationUnit>,
248+
pub largest_unit: Option<DateDurationUnit>,
243249
}
244250

245251
/// Whether to constrain or reject out-of-bounds values when constructing a Date.
@@ -410,6 +416,30 @@ mod unstable {
410416
/// the identity of an ordinal month changes from year to year.
411417
Ecma,
412418
}
419+
420+
/// A "duration unit" used to specify the minimum or maximum duration of time to
421+
/// care about.
422+
///
423+
/// <div class="stab unstable">
424+
/// 🚧 This code is considered unstable; it may change at any time, in breaking or non-breaking ways,
425+
/// including in SemVer minor releases. Do not use this type unless you are prepared for things to occasionally break.
426+
///
427+
/// Graduation tracking issue: [issue #3964](https://github.com/unicode-org/icu4x/issues/3964).
428+
/// </div>
429+
///
430+
/// ✨ *Enabled with the `unstable` Cargo feature.*
431+
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
432+
#[allow(clippy::exhaustive_enums)] // this type should be stable
433+
pub enum DateDurationUnit {
434+
/// Duration in years
435+
Years,
436+
/// Duration in months
437+
Months,
438+
/// Duration in weeks
439+
Weeks,
440+
/// Duration in days
441+
Days,
442+
}
413443
}
414444
#[cfg(test)]
415445
mod tests {

components/calendar/src/tests/arithmetic.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// called LICENSE at the top level of the ICU4X source tree
33
// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
44

5-
use crate::options::{DateAddOptions, DateDifferenceOptions, Overflow};
6-
use crate::types::{DateDuration, DateDurationUnit, Month};
5+
use crate::options::{DateAddOptions, DateDifferenceOptions, DateDurationUnit, Overflow};
6+
use crate::types::{DateDuration, Month};
77
use crate::{AsCalendar, Calendar, Date};
88
use core::fmt;
99

components/calendar/src/tests/date_arithmetic_snapshot.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// called LICENSE at the top level of the ICU4X source tree
33
// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
44

5-
use crate::options::{DateAddOptions, DateDifferenceOptions};
6-
use crate::types::{DateDuration, DateDurationUnit, RataDie};
5+
use crate::options::{DateAddOptions, DateDifferenceOptions, DateDurationUnit};
6+
use crate::types::{DateDuration, RataDie};
77
use crate::Date;
88
use insta::assert_snapshot;
99
use std::fmt::Write;

components/calendar/src/tests/extrema.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ use crate::calendar_arithmetic::{CONSTRUCTOR_YEAR_RANGE, GENEROUS_YEAR_RANGE, VA
66
use crate::duration::DateDuration;
77
use crate::error::DateAddError;
88
use crate::error::DateFromFieldsError;
9-
use crate::options::{DateAddOptions, DateDifferenceOptions, DateFromFieldsOptions, Overflow};
10-
use crate::types::{DateDurationUnit, DateFields, Month};
9+
use crate::options::{
10+
DateAddOptions, DateDifferenceOptions, DateDurationUnit, DateFromFieldsOptions, Overflow,
11+
};
12+
use crate::types::{DateFields, Month};
1113
use crate::Date;
1214
use calendrical_calculations::gregorian::fixed_from_gregorian;
1315
use calendrical_calculations::rata_die::RataDie;

components/calendar/src/types.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use zerovec::ule::AsULE;
1212

1313
// Export the duration types from here
1414
#[cfg(feature = "unstable")]
15-
pub use crate::duration::{DateDuration, DateDurationUnit};
15+
pub use crate::duration::DateDuration;
1616
use crate::{calendar_arithmetic::ArithmeticDate, error::MonthCodeParseError};
1717

1818
#[cfg(feature = "unstable")]

0 commit comments

Comments
 (0)