#[diplomat::bridge]
#[diplomat::abi_rename = "icu4x_{0}_mv1"]
#[diplomat::attr(auto, namespace = "icu4x")]
pub mod ffi {
use alloc::boxed::Box;
use crate::locale_core::ffi::Locale;
#[cfg(feature = "buffer_provider")]
use crate::{errors::ffi::DataError, provider::ffi::DataProvider};
#[diplomat::rust_link(icu::locale::TransformResult, Enum)]
#[diplomat::enum_convert(icu_locale::TransformResult)]
pub enum TransformResult {
Modified,
Unmodified,
}
#[diplomat::rust_link(icu::locale::LocaleCanonicalizer, Struct)]
#[diplomat::opaque]
pub struct LocaleCanonicalizer(icu_locale::LocaleCanonicalizer);
impl LocaleCanonicalizer {
#[diplomat::rust_link(icu::locale::LocaleCanonicalizer::new, FnInStruct)]
#[diplomat::attr(auto, constructor)]
#[cfg(feature = "compiled_data")]
pub fn create() -> Box<LocaleCanonicalizer> {
Box::new(LocaleCanonicalizer(icu_locale::LocaleCanonicalizer::new()))
}
#[diplomat::rust_link(icu::locale::LocaleCanonicalizer::new, FnInStruct)]
#[diplomat::attr(supports = fallible_constructors, named_constructor = "with_provider")]
#[cfg(feature = "buffer_provider")]
pub fn create_with_provider(
provider: &DataProvider,
) -> Result<Box<LocaleCanonicalizer>, DataError> {
Ok(Box::new(LocaleCanonicalizer(provider.call_constructor(
icu_locale::LocaleCanonicalizer::try_new_with_buffer_provider,
)?)))
}
#[diplomat::rust_link(icu::locale::LocaleCanonicalizer::new_with_expander, FnInStruct)]
#[diplomat::attr(auto, named_constructor = "extended")]
#[cfg(feature = "compiled_data")]
pub fn create_extended() -> Box<LocaleCanonicalizer> {
Box::new(LocaleCanonicalizer(
icu_locale::LocaleCanonicalizer::new_with_expander(
icu_locale::LocaleExpander::new_extended(),
),
))
}
#[diplomat::rust_link(icu::locale::LocaleCanonicalizer::new_with_expander, FnInStruct)]
#[diplomat::attr(supports = fallible_constructors, named_constructor = "extended_with_provider")]
#[cfg(feature = "buffer_provider")]
pub fn create_extended_with_provider(
provider: &DataProvider,
) -> Result<Box<LocaleCanonicalizer>, DataError> {
let expander = provider.call_constructor(|provider| {
icu_locale::LocaleExpander::try_new_with_buffer_provider(provider)
})?;
Ok(Box::new(LocaleCanonicalizer(provider.call_constructor(
move |provider| {
icu_locale::LocaleCanonicalizer::try_new_with_expander_with_buffer_provider(
provider, expander,
)
},
)?)))
}
#[diplomat::rust_link(icu::locale::LocaleCanonicalizer::canonicalize, FnInStruct)]
pub fn canonicalize(&self, locale: &mut Locale) -> TransformResult {
self.0.canonicalize(&mut locale.0).into()
}
}
#[diplomat::rust_link(icu::locale::LocaleExpander, Struct)]
#[diplomat::opaque]
pub struct LocaleExpander(pub icu_locale::LocaleExpander);
impl LocaleExpander {
#[diplomat::rust_link(icu::locale::LocaleExpander::new, FnInStruct)]
#[diplomat::attr(auto, constructor)]
#[cfg(feature = "compiled_data")]
pub fn create() -> Box<LocaleExpander> {
Box::new(LocaleExpander(icu_locale::LocaleExpander::new()))
}
#[diplomat::rust_link(icu::locale::LocaleExpander::new, FnInStruct)]
#[diplomat::attr(supports = fallible_constructors, named_constructor = "with_provider")]
#[cfg(feature = "buffer_provider")]
pub fn create_with_provider(
provider: &DataProvider,
) -> Result<Box<LocaleExpander>, DataError> {
Ok(Box::new(LocaleExpander(provider.call_constructor(
icu_locale::LocaleExpander::try_new_with_buffer_provider,
)?)))
}
#[diplomat::rust_link(icu::locale::LocaleExpander::new_extended, FnInStruct)]
#[diplomat::attr(auto, named_constructor = "extended")]
#[cfg(feature = "compiled_data")]
pub fn create_extended() -> Box<LocaleExpander> {
Box::new(LocaleExpander(icu_locale::LocaleExpander::new_extended()))
}
#[diplomat::rust_link(icu::locale::LocaleExpander::new_extended, FnInStruct)]
#[diplomat::attr(supports = fallible_constructors, named_constructor = "extended_with_provider")]
#[cfg(feature = "buffer_provider")]
pub fn create_extended_with_provider(
provider: &DataProvider,
) -> Result<Box<LocaleExpander>, DataError> {
Ok(Box::new(LocaleExpander(provider.call_constructor(
icu_locale::LocaleExpander::try_new_with_buffer_provider,
)?)))
}
#[diplomat::rust_link(icu::locale::LocaleExpander::maximize, FnInStruct)]
pub fn maximize(&self, locale: &mut Locale) -> TransformResult {
self.0.maximize(&mut locale.0.id).into()
}
#[diplomat::rust_link(icu::locale::LocaleExpander::minimize, FnInStruct)]
pub fn minimize(&self, locale: &mut Locale) -> TransformResult {
self.0.minimize(&mut locale.0.id).into()
}
#[diplomat::rust_link(icu::locale::LocaleExpander::minimize_favor_script, FnInStruct)]
pub fn minimize_favor_script(&self, locale: &mut Locale) -> TransformResult {
self.0.minimize_favor_script(&mut locale.0.id).into()
}
}
}