icu_capi/
measure_unit_parser.rs
1#[diplomat::bridge]
6#[diplomat::abi_rename = "icu4x_{0}_mv1"]
7#[diplomat::attr(auto, namespace = "icu4x")]
8pub mod ffi {
9 use alloc::boxed::Box;
10
11 #[cfg(feature = "buffer_provider")]
12 use crate::errors::ffi::DataError;
13 #[cfg(feature = "buffer_provider")]
14 use crate::provider::ffi::DataProvider;
15
16 #[diplomat::opaque]
17 #[diplomat::rust_link(icu::experimental::measure::measureunit::MeasureUnit, Struct)]
22 pub struct MeasureUnit(pub icu_experimental::measure::measureunit::MeasureUnit);
23
24 #[diplomat::opaque]
25 #[diplomat::rust_link(icu::experimental::measure::parser::MeasureUnitParser, Struct)]
27 pub struct MeasureUnitParser(pub icu_experimental::measure::parser::MeasureUnitParser);
28
29 impl MeasureUnitParser {
30 #[diplomat::rust_link(
32 icu::experimental::measure::parser::MeasureUnitParser::new,
33 FnInStruct
34 )]
35 #[diplomat::attr(auto, constructor)]
36 #[cfg(feature = "compiled_data")]
37 pub fn create() -> Box<MeasureUnitParser> {
38 Box::new(MeasureUnitParser(
39 icu_experimental::measure::parser::MeasureUnitParser::default(),
40 ))
41 }
42 #[diplomat::rust_link(
44 icu::experimental::measure::parser::MeasureUnitParser::new,
45 FnInStruct
46 )]
47 #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_provider")]
48 #[cfg(feature = "buffer_provider")]
49 pub fn create_with_provider(
50 provider: &DataProvider,
51 ) -> Result<Box<MeasureUnitParser>, DataError> {
52 Ok(Box::new(MeasureUnitParser(
53 icu_experimental::measure::parser::MeasureUnitParser::try_new_with_buffer_provider(
54 provider.get()?,
55 )?,
56 )))
57 }
58
59 #[diplomat::rust_link(
60 icu::experimental::measure::parser::MeasureUnitParser::parse,
61 FnInStruct
62 )]
63 pub fn parse(&self, unit_id: &DiplomatStr) -> Option<Box<MeasureUnit>> {
64 self.0
65 .try_from_utf8(unit_id)
66 .ok()
67 .map(MeasureUnit)
68 .map(Box::new)
69 }
70 }
71}