Skip to content

Commit 989e288

Browse files
authored
fix: allow passing &dyn TimeZoneProvider in arguments (#599)
Tested the crate using `cargo semver-checks` and everything looks good, so we could release this change in a 0.1.1 version if we want to.
1 parent 91fe5e7 commit 989e288

File tree

18 files changed

+93
-88
lines changed

18 files changed

+93
-88
lines changed

docs/architecture.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ A `TimeZoneProvider` API on a core builtin will look like the below.
5151

5252
```rust
5353
impl ZonedDateTime {
54-
pub fn day_with_provider(&self, provider: &impl TimeZoneProvider) -> TemporalResult<u8> {
54+
pub fn day_with_provider(&self, provider: &(impl TimeZoneProvider + ?Sized)) -> TemporalResult<u8> {
5555
// Code goes here.
5656
}
5757
}

provider/src/tzif.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1917,7 +1917,7 @@ mod tests {
19171917
id: &str,
19181918
before_offset: i64,
19191919
after_offset: i64,
1920-
provider: &impl TimeZoneProvider,
1920+
provider: &(impl TimeZoneProvider + ?Sized),
19211921
) {
19221922
let id = provider.get(id.as_bytes()).unwrap();
19231923
let before_possible = provider

src/builtins/core/duration.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -830,7 +830,7 @@ impl Duration {
830830
&self,
831831
other: &Duration,
832832
relative_to: Option<RelativeTo>,
833-
provider: &impl TimeZoneProvider,
833+
provider: &(impl TimeZoneProvider + ?Sized),
834834
) -> TemporalResult<Ordering> {
835835
if self == other {
836836
return Ok(Ordering::Equal);
@@ -1054,7 +1054,7 @@ impl Duration {
10541054
&self,
10551055
options: RoundingOptions,
10561056
relative_to: Option<RelativeTo>,
1057-
provider: &impl TimeZoneProvider,
1057+
provider: &(impl TimeZoneProvider + ?Sized),
10581058
) -> TemporalResult<Self> {
10591059
// NOTE(HalidOdat): Steps 1-12 are handled before calling the function.
10601060
//
@@ -1286,7 +1286,7 @@ impl Duration {
12861286
&self,
12871287
unit: Unit,
12881288
relative_to: Option<RelativeTo>,
1289-
provider: &impl TimeZoneProvider,
1289+
provider: &(impl TimeZoneProvider + ?Sized),
12901290
// Review question what is the return type of duration.prototye.total?
12911291
) -> TemporalResult<FiniteF64> {
12921292
match relative_to {

src/builtins/core/duration/normalized.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ impl InternalDurationRecord {
372372
sign: Sign,
373373
dest_epoch_ns: i128,
374374
dt: &PlainDateTime,
375-
time_zone: Option<(&TimeZone, &impl TimeZoneProvider)>, // ???
375+
time_zone: Option<(&TimeZone, &(impl TimeZoneProvider + ?Sized))>, // ???
376376
options: ResolvedRoundingOptions,
377377
) -> TemporalResult<NudgeRecord> {
378378
// NOTE: r2 may never be used...need to test.
@@ -660,7 +660,7 @@ impl InternalDurationRecord {
660660
dt: &PlainDateTime,
661661
time_zone: &TimeZone,
662662
options: ResolvedRoundingOptions,
663-
provider: &impl TimeZoneProvider,
663+
provider: &(impl TimeZoneProvider + ?Sized),
664664
) -> TemporalResult<NudgeRecord> {
665665
let d = self.date();
666666
// 1.Let start be ? CalendarDateAdd(calendar, isoDateTime.[[ISODate]], duration.[[Date]], constrain).
@@ -822,7 +822,7 @@ impl InternalDurationRecord {
822822
sign: Sign,
823823
nudged_epoch_ns: i128,
824824
iso_date_time: &IsoDateTime,
825-
time_zone: Option<(&TimeZone, &impl TimeZoneProvider)>,
825+
time_zone: Option<(&TimeZone, &(impl TimeZoneProvider + ?Sized))>,
826826
calendar: &Calendar,
827827
largest_unit: Unit,
828828
smallest_unit: Unit,
@@ -956,7 +956,7 @@ impl InternalDurationRecord {
956956
&self,
957957
dest_epoch_ns: i128,
958958
dt: &PlainDateTime,
959-
time_zone: Option<(&TimeZone, &impl TimeZoneProvider)>,
959+
time_zone: Option<(&TimeZone, &(impl TimeZoneProvider + ?Sized))>,
960960
options: ResolvedRoundingOptions,
961961
) -> TemporalResult<InternalDurationRecord> {
962962
let duration = *self;
@@ -1014,7 +1014,7 @@ impl InternalDurationRecord {
10141014
&self,
10151015
dest_epoch_ns: i128,
10161016
dt: &PlainDateTime,
1017-
time_zone: Option<(&TimeZone, &impl TimeZoneProvider)>,
1017+
time_zone: Option<(&TimeZone, &(impl TimeZoneProvider + ?Sized))>,
10181018
unit: Unit,
10191019
) -> TemporalResult<FiniteF64> {
10201020
// 1. If IsCalendarUnit(unit) is true, or timeZone is not unset and unit is day, then

src/builtins/core/instant.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ impl Instant {
395395
pub fn to_zoned_date_time_iso_with_provider(
396396
&self,
397397
time_zone: TimeZone,
398-
provider: &impl TimeZoneProvider,
398+
provider: &(impl TimeZoneProvider + ?Sized),
399399
) -> TemporalResult<ZonedDateTime> {
400400
ZonedDateTime::new_unchecked_with_provider(*self, time_zone, Calendar::ISO, provider)
401401
}
@@ -409,7 +409,7 @@ impl Instant {
409409
&self,
410410
timezone: Option<TimeZone>,
411411
options: ToStringRoundingOptions,
412-
provider: &impl TimeZoneProvider,
412+
provider: &(impl TimeZoneProvider + ?Sized),
413413
) -> TemporalResult<String> {
414414
self.to_ixdtf_writeable_with_provider(timezone, options, provider)
415415
.map(|x| x.write_to_string().into())
@@ -420,7 +420,7 @@ impl Instant {
420420
&self,
421421
timezone: Option<TimeZone>,
422422
options: ToStringRoundingOptions,
423-
provider: &impl TimeZoneProvider,
423+
provider: &(impl TimeZoneProvider + ?Sized),
424424
) -> TemporalResult<impl Writeable + '_> {
425425
let resolved_options = options.resolve()?;
426426
let round = self.round_instant(ResolvedRoundingOptions::from_to_string_options(

src/builtins/core/now.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ impl<H: HostHooks> Now<H> {
2424
pub(crate) fn system_datetime_with_provider(
2525
self,
2626
time_zone: Option<TimeZone>,
27-
provider: &impl TimeZoneProvider,
27+
provider: &(impl TimeZoneProvider + ?Sized),
2828
) -> TemporalResult<IsoDateTime> {
2929
let system_nanoseconds = self.host_hooks.get_system_epoch_nanoseconds()?;
3030
let time_zone = time_zone.unwrap_or(self.host_hooks.get_system_time_zone(provider)?);
@@ -34,7 +34,7 @@ impl<H: HostHooks> Now<H> {
3434
/// Converts the current [`Now`] into a [`TimeZone`].
3535
pub fn time_zone_with_provider(
3636
self,
37-
provider: &impl TimeZoneProvider,
37+
provider: &(impl TimeZoneProvider + ?Sized),
3838
) -> TemporalResult<TimeZone> {
3939
self.host_hooks.get_system_time_zone(provider)
4040
}
@@ -50,7 +50,7 @@ impl<H: HostHooks> Now<H> {
5050
pub fn zoned_date_time_iso_with_provider(
5151
self,
5252
time_zone: Option<TimeZone>,
53-
provider: &impl TimeZoneProvider,
53+
provider: &(impl TimeZoneProvider + ?Sized),
5454
) -> TemporalResult<ZonedDateTime> {
5555
let system_nanoseconds = self.host_hooks.get_system_epoch_nanoseconds()?;
5656
let time_zone = time_zone.unwrap_or(self.host_hooks.get_system_time_zone(provider)?);
@@ -67,7 +67,7 @@ impl<H: HostHooks> Now<H> {
6767
pub fn plain_date_time_iso_with_provider(
6868
self,
6969
time_zone: Option<TimeZone>,
70-
provider: &impl TimeZoneProvider,
70+
provider: &(impl TimeZoneProvider + ?Sized),
7171
) -> TemporalResult<PlainDateTime> {
7272
let iso = self.system_datetime_with_provider(time_zone, provider)?;
7373
Ok(PlainDateTime::new_unchecked(iso, Calendar::ISO))
@@ -80,7 +80,7 @@ impl<H: HostHooks> Now<H> {
8080
pub fn plain_date_iso_with_provider(
8181
self,
8282
time_zone: Option<TimeZone>,
83-
provider: &impl TimeZoneProvider,
83+
provider: &(impl TimeZoneProvider + ?Sized),
8484
) -> TemporalResult<PlainDate> {
8585
let iso = self.system_datetime_with_provider(time_zone, provider)?;
8686
Ok(PlainDate::new_unchecked(iso.date, Calendar::ISO))
@@ -93,7 +93,7 @@ impl<H: HostHooks> Now<H> {
9393
pub fn plain_time_with_provider(
9494
self,
9595
time_zone: Option<TimeZone>,
96-
provider: &impl TimeZoneProvider,
96+
provider: &(impl TimeZoneProvider + ?Sized),
9797
) -> TemporalResult<PlainTime> {
9898
let iso = self.system_datetime_with_provider(time_zone, provider)?;
9999
Ok(PlainTime::new_unchecked(iso.time))
@@ -148,7 +148,10 @@ mod tests {
148148
}
149149

150150
impl HostTimeZone for TestHooks {
151-
fn get_host_time_zone(&self, _: &impl TimeZoneProvider) -> TemporalResult<TimeZone> {
151+
fn get_host_time_zone(
152+
&self,
153+
_: &(impl TimeZoneProvider + ?Sized),
154+
) -> TemporalResult<TimeZone> {
152155
Ok(self.time_zone)
153156
}
154157
}

src/builtins/core/plain_date.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,7 @@ impl PlainDate {
660660
&self,
661661
time_zone: TimeZone,
662662
plain_time: Option<PlainTime>,
663-
provider: &impl TimeZoneProvider,
663+
provider: &(impl TimeZoneProvider + ?Sized),
664664
) -> TemporalResult<ZonedDateTime> {
665665
// NOTE (nekevss): Steps 1-4 are engine specific
666666
let epoch_ns = if let Some(time) = plain_time {

src/builtins/core/plain_date_time.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -892,7 +892,7 @@ impl PlainDateTime {
892892
&self,
893893
time_zone: TimeZone,
894894
disambiguation: Disambiguation,
895-
provider: &impl TimeZoneProvider,
895+
provider: &(impl TimeZoneProvider + ?Sized),
896896
) -> TemporalResult<ZonedDateTime> {
897897
// 6. Let epochNs be ? GetEpochNanosecondsFor(timeZone, dateTime.[[ISODateTime]], disambiguation).
898898
let epoch_ns = time_zone.get_epoch_nanoseconds_for(self.iso, disambiguation, provider)?;

src/builtins/core/plain_month_day.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ impl PlainMonthDay {
353353
pub fn epoch_ns_for_with_provider(
354354
&self,
355355
time_zone: TimeZone,
356-
provider: &impl TimeZoneProvider,
356+
provider: &(impl TimeZoneProvider + ?Sized),
357357
) -> TemporalResult<EpochNanoseconds> {
358358
// 2. Let isoDateTime be CombineISODateAndTimeRecord(temporalYearMonth.[[ISODate]], NoonTimeRecord()).
359359
let iso = IsoDateTime::new(self.iso, IsoTime::noon())?;

src/builtins/core/plain_year_month.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -615,7 +615,7 @@ impl PlainYearMonth {
615615
pub fn epoch_ns_for_with_provider(
616616
&self,
617617
time_zone: TimeZone,
618-
provider: &impl TimeZoneProvider,
618+
provider: &(impl TimeZoneProvider + ?Sized),
619619
) -> TemporalResult<EpochNanoseconds> {
620620
// 2. Let isoDateTime be CombineISODateAndTimeRecord(temporalYearMonth.[[ISODate]], NoonTimeRecord()).
621621
let iso = IsoDateTime::new(self.iso, IsoTime::noon())?;

0 commit comments

Comments
 (0)