Skip to content

Commit 65a70cf

Browse files
committed
Use None eras for era-less calendars (ISO, Chinese, Dangi)
1 parent 9ba91ac commit 65a70cf

3 files changed

Lines changed: 17 additions & 27 deletions

File tree

src/builtins/core/calendar.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ impl Calendar {
207207
let calendar_date = self
208208
.0
209209
.from_codes(
210-
Some(resolved_fields.era_year.era.0.as_str()),
210+
resolved_fields.era_year.era.as_ref().map(|e| e.0.as_str()),
211211
resolved_fields.era_year.year,
212212
IcuMonthCode(resolved_fields.month_code.0),
213213
resolved_fields.day,
@@ -272,7 +272,7 @@ impl Calendar {
272272
let calendar_date = self
273273
.0
274274
.from_codes(
275-
Some(resolved_fields.era_year.era.0.as_str()),
275+
resolved_fields.era_year.era.as_ref().map(|e| e.0.as_str()),
276276
resolved_fields.era_year.year,
277277
IcuMonthCode(resolved_fields.month_code.0),
278278
resolved_fields.day,
@@ -571,9 +571,9 @@ impl Calendar {
571571
pub(crate) fn get_calendar_default_era(&self) -> Option<EraInfo> {
572572
match self.0 .0.kind() {
573573
AnyCalendarKind::Buddhist => Some(era::BUDDHIST_ERA),
574-
AnyCalendarKind::Chinese => Some(era::CHINESE_ERA),
574+
AnyCalendarKind::Chinese => None,
575575
AnyCalendarKind::Coptic => Some(era::COPTIC_ERA),
576-
AnyCalendarKind::Dangi => Some(era::DANGI_ERA),
576+
AnyCalendarKind::Dangi => None,
577577
AnyCalendarKind::Ethiopian => Some(era::ETHIOPIC_ERA),
578578
AnyCalendarKind::EthiopianAmeteAlem => Some(era::ETHIOAA_ERA),
579579
AnyCalendarKind::Gregorian => Some(era::GREGORY_ERA),
@@ -583,7 +583,7 @@ impl Calendar {
583583
AnyCalendarKind::HijriTabularTypeIIFriday => Some(era::ISLAMIC_ERA),
584584
AnyCalendarKind::HijriTabularTypeIIThursday => Some(era::ISLAMIC_ERA),
585585
AnyCalendarKind::HijriUmmAlQura => Some(era::ISLAMIC_ERA),
586-
AnyCalendarKind::Iso => Some(era::ISO_ERA),
586+
AnyCalendarKind::Iso => None,
587587
AnyCalendarKind::Japanese => Some(era::JAPANESE_ERA),
588588
AnyCalendarKind::Persian => Some(era::PERSIAN_ERA),
589589
AnyCalendarKind::Roc => Some(era::ROC_ERA),

src/builtins/core/calendar/era.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,6 @@ pub(crate) const JAPANESE_INVERSE_ERA_IDENTIFIERS: [TinyAsciiStr<19>; 2] =
8383

8484
// NOTE: The below currently might not align 100% with ICU4X.
8585
// TODO: Update to align with ICU4X depending on any Era updates.
86-
87-
// Calendars without eras
88-
pub(crate) const ISO_ERA: EraInfo = valid_era!("default", i32::MIN..=i32::MAX);
89-
pub(crate) const CHINESE_ERA: EraInfo = valid_era!("chinese", i32::MIN..=i32::MAX);
90-
pub(crate) const DANGI_ERA: EraInfo = valid_era!("dangi", i32::MIN..=i32::MAX);
91-
9286
pub(crate) const BUDDHIST_ERA: EraInfo = valid_era!("be", i32::MIN..=i32::MAX);
9387
pub(crate) const COPTIC_ERA: EraInfo = valid_era!("am", 1..=i32::MAX);
9488
pub(crate) const ETHIOPIC_ERA: EraInfo = valid_era!("am", 1..=i32::MAX);

src/builtins/core/calendar/types.rs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ use crate::{TemporalError, TemporalResult};
1111

1212
use crate::builtins::core::{calendar::Calendar, PartialDate};
1313

14-
use super::era::ISO_ERA;
15-
1614
#[derive(Debug, Clone, Copy, PartialEq)]
1715
pub enum ResolutionType {
1816
Date,
@@ -82,7 +80,7 @@ pub struct Era(pub(crate) TinyAsciiStr<16>);
8280

8381
#[derive(Debug)]
8482
pub struct EraYear {
85-
pub(crate) era: Era,
83+
pub(crate) era: Option<Era>,
8684
pub(crate) year: i32,
8785
}
8886

@@ -114,21 +112,18 @@ impl EraYear {
114112
}
115113
Ok(Self {
116114
year: era_year,
117-
era: Era(era_info.name),
118-
})
119-
}
120-
(Some(year), None, None) => {
121-
let Some(era) = partial.calendar.get_calendar_default_era() else {
122-
return Err(TemporalError::r#type()
123-
.with_message("Era is required for the provided calendar."));
124-
};
125-
Ok(Self {
126-
era: Era(era.name),
127-
year,
115+
era: Some(Era(era_info.name)),
128116
})
129117
}
118+
(Some(year), None, None) => Ok(Self {
119+
era: partial
120+
.calendar
121+
.get_calendar_default_era()
122+
.map(|e| Era(e.name)),
123+
year,
124+
}),
130125
(None, None, None) if resolution_type == ResolutionType::MonthDay => Ok(Self {
131-
era: Era(ISO_ERA.name),
126+
era: None,
132127
year: 1972,
133128
}),
134129
_ => Err(TemporalError::r#type()
@@ -494,7 +489,8 @@ mod tests {
494489
.expect(&expect_str);
495490

496491
assert_eq!(
497-
&*era_year.era.0, &*era.name,
492+
&*era_year.era.expect("only testing calendars with era").0,
493+
&*era.name,
498494
"Backcalculated era must match"
499495
);
500496
assert_eq!(era_year.year, 1, "Backcalculated era must match");

0 commit comments

Comments
 (0)