#[diplomat::bridge]
#[diplomat::abi_rename = "icu4x_{0}_mv1"]
#[diplomat::attr(auto, namespace = "icu4x")]
pub mod ffi {
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::measure::measureunit::MeasureUnit, Struct)]
pub struct MeasureUnit(pub icu_experimental::measure::measureunit::MeasureUnit);
#[diplomat::opaque]
#[diplomat::rust_link(icu::experimental::measure::parser::MeasureUnitParser, Struct)]
pub struct MeasureUnitParser(pub icu_experimental::measure::parser::MeasureUnitParser);
impl MeasureUnitParser {
#[diplomat::rust_link(
icu::experimental::measure::parser::MeasureUnitParser::new,
FnInStruct
)]
#[diplomat::attr(auto, constructor)]
#[cfg(feature = "compiled_data")]
pub fn create() -> Box<MeasureUnitParser> {
Box::new(MeasureUnitParser(
icu_experimental::measure::parser::MeasureUnitParser::default(),
))
}
#[diplomat::rust_link(
icu::experimental::measure::parser::MeasureUnitParser::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<MeasureUnitParser>, DataError> {
Ok(Box::new(MeasureUnitParser(
icu_experimental::measure::parser::MeasureUnitParser::try_new_with_buffer_provider(
provider.get()?,
)?,
)))
}
#[diplomat::rust_link(
icu::experimental::measure::parser::MeasureUnitParser::parse,
FnInStruct
)]
pub fn parse(&self, unit_id: &DiplomatStr) -> Option<Box<MeasureUnit>> {
self.0
.try_from_utf8(unit_id)
.ok()
.map(MeasureUnit)
.map(Box::new)
}
}
}