Skip to content

Commit a393ce7

Browse files
authored
Remove SubsecondError and replace with Option API (#6500)
1 parent b27e78d commit a393ce7

File tree

9 files changed

+111
-28
lines changed

9 files changed

+111
-28
lines changed

components/datetime/src/options/mod.rs

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -562,16 +562,25 @@ pub enum SubsecondDigits {
562562
S9 = 9,
563563
}
564564

565-
/// An error from constructing [`SubsecondDigits`].
566-
#[derive(Debug, Copy, Clone, PartialEq, Eq, displaydoc::Display)]
567-
#[non_exhaustive]
568-
pub enum SubsecondError {
569-
/// The provided value is out of range (1-9).
570-
OutOfRange,
565+
impl SubsecondDigits {
566+
/// Constructs a [`SubsecondDigits`] from an integer number of digits.
567+
pub fn try_from_int(value: u8) -> Option<Self> {
568+
use SubsecondDigits::*;
569+
match value {
570+
1 => Some(S1),
571+
2 => Some(S2),
572+
3 => Some(S3),
573+
4 => Some(S4),
574+
5 => Some(S5),
575+
6 => Some(S6),
576+
7 => Some(S7),
577+
8 => Some(S8),
578+
9 => Some(S9),
579+
_ => None,
580+
}
581+
}
571582
}
572583

573-
impl core::error::Error for SubsecondError {}
574-
575584
impl From<SubsecondDigits> for u8 {
576585
fn from(value: SubsecondDigits) -> u8 {
577586
use SubsecondDigits::*;
@@ -588,22 +597,3 @@ impl From<SubsecondDigits> for u8 {
588597
}
589598
}
590599
}
591-
592-
impl TryFrom<u8> for SubsecondDigits {
593-
type Error = SubsecondError;
594-
fn try_from(value: u8) -> Result<Self, Self::Error> {
595-
use SubsecondDigits::*;
596-
match value {
597-
1 => Ok(S1),
598-
2 => Ok(S2),
599-
3 => Ok(S3),
600-
4 => Ok(S4),
601-
5 => Ok(S5),
602-
6 => Ok(S6),
603-
7 => Ok(S7),
604-
8 => Ok(S8),
605-
9 => Ok(S9),
606-
_ => Err(SubsecondError::OutOfRange),
607-
}
608-
}
609-
}

ffi/capi/bindings/c/TimePrecision.h

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ffi/capi/bindings/cpp/icu4x/TimePrecision.d.hpp

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ffi/capi/bindings/cpp/icu4x/TimePrecision.hpp

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ffi/capi/bindings/dart/TimePrecision.g.dart

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ffi/capi/bindings/js/TimePrecision.d.ts

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ffi/capi/bindings/js/TimePrecision.mjs

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ffi/capi/src/datetime_options.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,15 @@ pub mod ffi {
4646
Subsecond8,
4747
Subsecond9,
4848
}
49+
50+
impl TimePrecision {
51+
#[diplomat::rust_link(icu::datetime::options::SubsecondDigits::try_from_int, FnInEnum)]
52+
pub fn from_subsecond_digits(digits: u8) -> Option<Self> {
53+
icu_datetime::options::SubsecondDigits::try_from_int(digits)
54+
.map(icu_datetime::options::TimePrecision::Subsecond)
55+
.map(Into::into)
56+
}
57+
}
4958
}
5059

5160
impl From<ffi::TimePrecision> for icu_datetime::options::TimePrecision {
@@ -69,3 +78,29 @@ impl From<ffi::TimePrecision> for icu_datetime::options::TimePrecision {
6978
}
7079
}
7180
}
81+
82+
impl From<icu_datetime::options::TimePrecision> for ffi::TimePrecision {
83+
fn from(time_precision: icu_datetime::options::TimePrecision) -> Self {
84+
use icu_datetime::options::SubsecondDigits;
85+
use icu_datetime::options::TimePrecision;
86+
match time_precision {
87+
TimePrecision::Hour => ffi::TimePrecision::Hour,
88+
TimePrecision::Minute => ffi::TimePrecision::Minute,
89+
TimePrecision::MinuteOptional => ffi::TimePrecision::MinuteOptional,
90+
TimePrecision::Second => ffi::TimePrecision::Second,
91+
TimePrecision::Subsecond(SubsecondDigits::S1) => ffi::TimePrecision::Subsecond1,
92+
TimePrecision::Subsecond(SubsecondDigits::S2) => ffi::TimePrecision::Subsecond2,
93+
TimePrecision::Subsecond(SubsecondDigits::S3) => ffi::TimePrecision::Subsecond3,
94+
TimePrecision::Subsecond(SubsecondDigits::S4) => ffi::TimePrecision::Subsecond4,
95+
TimePrecision::Subsecond(SubsecondDigits::S5) => ffi::TimePrecision::Subsecond5,
96+
TimePrecision::Subsecond(SubsecondDigits::S6) => ffi::TimePrecision::Subsecond6,
97+
TimePrecision::Subsecond(SubsecondDigits::S7) => ffi::TimePrecision::Subsecond7,
98+
TimePrecision::Subsecond(SubsecondDigits::S8) => ffi::TimePrecision::Subsecond8,
99+
TimePrecision::Subsecond(SubsecondDigits::S9) => ffi::TimePrecision::Subsecond9,
100+
_ => {
101+
debug_assert!(false, "cross-crate exhaustive match");
102+
ffi::TimePrecision::Second
103+
}
104+
}
105+
}
106+
}

ffi/capi/tests/missing_apis.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616

1717
fixed_decimal::Decimal::new#FnInTypedef
18-
icu::datetime::options::SubsecondError#Enum
1918
icu_provider_adapters::fork::ForkByMarkerProvider::inner#FnInTypedef
2019
icu_provider_adapters::fork::ForkByMarkerProvider::inner_mut#FnInTypedef
2120
icu_provider_adapters::fork::ForkByMarkerProvider::into_inner#FnInTypedef

0 commit comments

Comments
 (0)