#[diplomat::bridge]
#[diplomat::abi_rename = "icu4x_{0}_mv1"]
#[diplomat::attr(auto, namespace = "icu4x")]
pub mod ffi {
use crate::unstable::measure_unit_parser::ffi::MeasureUnit;
use alloc::boxed::Box;
#[cfg(feature = "buffer_provider")]
use crate::unstable::errors::ffi::DataError;
#[cfg(feature = "buffer_provider")]
use crate::unstable::provider::ffi::DataProvider;
#[diplomat::opaque]
#[diplomat::rust_link(icu::experimental::units::converter_factory::ConverterFactory, Struct)]
pub struct UnitsConverterFactory(
pub icu_experimental::units::converter_factory::ConverterFactory,
);
impl UnitsConverterFactory {
#[diplomat::rust_link(
icu::experimental::units::converter_factory::ConverterFactory::new,
FnInStruct
)]
#[diplomat::attr(auto, constructor)]
#[cfg(feature = "compiled_data")]
pub fn create() -> Box<UnitsConverterFactory> {
Box::new(UnitsConverterFactory(
icu_experimental::units::converter_factory::ConverterFactory::new(),
))
}
#[diplomat::rust_link(
icu::experimental::units::converter_factory::ConverterFactory::new,
FnInStruct
)]
#[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_provider")]
#[cfg(feature = "buffer_provider")]
pub fn create_with_provider(
provider: &DataProvider,
) -> Result<Box<UnitsConverterFactory>, DataError> {
Ok(Box::new(UnitsConverterFactory(icu_experimental::units::converter_factory::ConverterFactory::try_new_with_buffer_provider(provider.get()?)?)))
}
#[diplomat::rust_link(
icu::experimental::units::converter_factory::ConverterFactory::converter,
FnInStruct
)]
pub fn converter(
&self,
from: &MeasureUnit,
to: &MeasureUnit,
) -> Option<Box<UnitsConverter>> {
self.0
.converter(&from.0, &to.0)
.map(UnitsConverter)
.map(Box::new)
}
}
#[diplomat::opaque]
#[diplomat::rust_link(icu::experimental::units::converter::UnitsConverter, Struct)]
#[diplomat::attr(demo_gen, disable)]
pub struct UnitsConverter(pub icu_experimental::units::converter::UnitsConverter<f64>);
impl UnitsConverter {
#[diplomat::rust_link(
icu::experimental::units::converter::UnitsConverter::convert,
FnInStruct
)]
#[diplomat::attr(supports = method_overloading, rename = "convert")]
#[diplomat::attr(js, rename = "convert_number")]
pub fn convert_double(&self, value: f64) -> f64 {
self.0.convert(&value)
}
#[diplomat::rust_link(
icu::experimental::units::converter::UnitsConverter::clone,
FnInStruct
)]
pub fn clone(&self) -> Box<Self> {
Box::new(UnitsConverter(self.0.clone()))
}
}
}