Skip to content

Commit

Permalink
Make some options bags have optional fields
Browse files Browse the repository at this point in the history
  • Loading branch information
Manishearth committed Sep 4, 2024
1 parent 1d0c52b commit 95896d1
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 30 deletions.
17 changes: 11 additions & 6 deletions ffi/capi/src/casemap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ pub mod ffi {
use alloc::boxed::Box;

use crate::{errors::ffi::DataError, locale_core::ffi::Locale, provider::ffi::DataProvider};
use diplomat_runtime::DiplomatOption;

use writeable::Writeable;

Expand All @@ -32,8 +33,8 @@ pub mod ffi {
#[diplomat::rust_link(icu::casemap::titlecase::TitlecaseOptions, Struct)]
#[diplomat::attr(supports = non_exhaustive_structs, rename = "TitlecaseOptions")]
pub struct TitlecaseOptionsV1 {
pub leading_adjustment: LeadingAdjustment,
pub trailing_case: TrailingCase,
pub leading_adjustment: DiplomatOption<LeadingAdjustment>,
pub trailing_case: DiplomatOption<TrailingCase>,
}

impl TitlecaseOptionsV1 {
Expand All @@ -42,8 +43,8 @@ pub mod ffi {
#[diplomat::attr(any(cpp, js), rename = "default_options")]
pub fn default() -> TitlecaseOptionsV1 {
Self {
leading_adjustment: LeadingAdjustment::Auto,
trailing_case: TrailingCase::Lower,
leading_adjustment: None.into(),
trailing_case: None.into(),
}
}
}
Expand Down Expand Up @@ -300,8 +301,12 @@ impl From<ffi::TitlecaseOptionsV1> for TitlecaseOptions {
fn from(other: ffi::TitlecaseOptionsV1) -> Self {
let mut ret = Self::default();

ret.leading_adjustment = other.leading_adjustment.into();
ret.trailing_case = other.trailing_case.into();
if let Some(l) = Option::<ffi::LeadingAdjustment>::from(other.leading_adjustment) {
ret.leading_adjustment = l.into();
}
if let Some(t) = Option::<ffi::TrailingCase>::from(other.trailing_case) {
ret.trailing_case = t.into();
}
ret
}
}
33 changes: 9 additions & 24 deletions ffi/capi/src/decimal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ pub mod ffi {
pub struct FixedDecimalFormatter(pub icu_decimal::FixedDecimalFormatter);

#[diplomat::rust_link(icu::decimal::options::GroupingStrategy, Enum)]
#[diplomat::enum_convert(icu_decimal::options::GroupingStrategy, needs_wildcard)]
pub enum FixedDecimalGroupingStrategy {
Auto,
Never,
Expand All @@ -37,22 +38,14 @@ pub mod ffi {
pub fn create_with_grouping_strategy(
provider: &DataProvider,
locale: &Locale,
grouping_strategy: FixedDecimalGroupingStrategy,
grouping_strategy: Option<FixedDecimalGroupingStrategy>,
) -> Result<Box<FixedDecimalFormatter>, DataError> {
let locale = locale.to_datalocale();

let grouping_strategy = match grouping_strategy {
FixedDecimalGroupingStrategy::Auto => icu_decimal::options::GroupingStrategy::Auto,
FixedDecimalGroupingStrategy::Never => {
icu_decimal::options::GroupingStrategy::Never
}
FixedDecimalGroupingStrategy::Always => {
icu_decimal::options::GroupingStrategy::Always
}
FixedDecimalGroupingStrategy::Min2 => icu_decimal::options::GroupingStrategy::Min2,
};
let mut options = icu_decimal::options::FixedDecimalFormatterOptions::default();
options.grouping_strategy = grouping_strategy;
options.grouping_strategy = grouping_strategy
.map(Into::into)
.unwrap_or(icu_decimal::options::GroupingStrategy::Auto);
Ok(Box::new(FixedDecimalFormatter(call_constructor!(
icu_decimal::FixedDecimalFormatter::try_new,
icu_decimal::FixedDecimalFormatter::try_new_with_any_provider,
Expand All @@ -77,7 +70,7 @@ pub mod ffi {
secondary_group_size: u8,
min_group_size: u8,
digits: &[DiplomatChar],
grouping_strategy: FixedDecimalGroupingStrategy,
grouping_strategy: Option<FixedDecimalGroupingStrategy>,
) -> Result<Box<FixedDecimalFormatter>, DataError> {
use alloc::borrow::Cow;
fn str_to_cow(s: &diplomat_runtime::DiplomatStr) -> Cow<'static, str> {
Expand Down Expand Up @@ -115,18 +108,10 @@ pub mod ffi {
min_grouping: min_group_size,
};

let grouping_strategy = match grouping_strategy {
FixedDecimalGroupingStrategy::Auto => icu_decimal::options::GroupingStrategy::Auto,
FixedDecimalGroupingStrategy::Never => {
icu_decimal::options::GroupingStrategy::Never
}
FixedDecimalGroupingStrategy::Always => {
icu_decimal::options::GroupingStrategy::Always
}
FixedDecimalGroupingStrategy::Min2 => icu_decimal::options::GroupingStrategy::Min2,
};
let mut options = icu_decimal::options::FixedDecimalFormatterOptions::default();
options.grouping_strategy = grouping_strategy;
options.grouping_strategy = grouping_strategy
.map(Into::into)
.unwrap_or(icu_decimal::options::GroupingStrategy::Auto);
Ok(Box::new(FixedDecimalFormatter(
icu_decimal::FixedDecimalFormatter::try_new_with_any_provider(
&icu_provider_adapters::any_payload::AnyPayloadProvider::from_any_payload::<
Expand Down

0 comments on commit 95896d1

Please sign in to comment.