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::unstable::{errors::ffi::DataError, provider::ffi::DataProvider};
13
14 #[diplomat::opaque]
16 #[diplomat::rust_link(icu::normalizer::properties::CanonicalCombiningClassMap, Struct)]
17 #[diplomat::rust_link(
18 icu::normalizer::properties::CanonicalCombiningClassMapBorrowed,
19 Struct,
20 hidden
21 )]
22 pub struct CanonicalCombiningClassMap(
23 pub icu_normalizer::properties::CanonicalCombiningClassMap,
24 );
25
26 impl CanonicalCombiningClassMap {
27 #[diplomat::rust_link(
29 icu::normalizer::properties::CanonicalCombiningClassMap::new,
30 FnInStruct
31 )]
32 #[diplomat::rust_link(
33 icu::normalizer::properties::CanonicalCombiningClassMapBorrowed::new,
34 FnInStruct,
35 hidden
36 )]
37 #[diplomat::attr(auto, constructor)]
38 #[cfg(feature = "compiled_data")]
39 pub fn create() -> Box<CanonicalCombiningClassMap> {
40 Box::new(CanonicalCombiningClassMap(
41 icu_normalizer::properties::CanonicalCombiningClassMap::new().static_to_owned(),
42 ))
43 }
44
45 #[diplomat::rust_link(
47 icu::normalizer::properties::CanonicalCombiningClassMap::new,
48 FnInStruct
49 )]
50 #[diplomat::rust_link(
51 icu::normalizer::properties::CanonicalCombiningClassMapBorrowed::new,
52 FnInStruct,
53 hidden
54 )]
55 #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_provider")]
56 #[cfg(feature = "buffer_provider")]
57 pub fn create_with_provider(
58 provider: &DataProvider,
59 ) -> Result<Box<CanonicalCombiningClassMap>, DataError> {
60 Ok(Box::new(CanonicalCombiningClassMap(icu_normalizer::properties::CanonicalCombiningClassMap::try_new_with_buffer_provider(provider.get()?)?)))
61 }
62
63 #[diplomat::rust_link(
64 icu::normalizer::properties::CanonicalCombiningClassMapBorrowed::get,
65 FnInStruct
66 )]
67 #[diplomat::rust_link(
68 icu::normalizer::properties::CanonicalCombiningClassMapBorrowed::get32,
69 FnInStruct,
70 hidden
71 )]
72 #[diplomat::rust_link(
73 icu::normalizer::properties::CanonicalCombiningClassMapBorrowed::get32_u8,
74 FnInStruct,
75 hidden
76 )]
77 #[diplomat::rust_link(
78 icu::normalizer::properties::CanonicalCombiningClassMapBorrowed::get_u8,
79 FnInStruct,
80 hidden
81 )]
82 #[diplomat::rust_link(icu::properties::props::CanonicalCombiningClass, Struct, compact)]
83 #[diplomat::attr(auto, indexer)]
84 pub fn get(&self, ch: DiplomatChar) -> u8 {
85 self.0.as_borrowed().get32_u8(ch)
86 }
87 }
88
89 #[diplomat::opaque]
93 #[diplomat::rust_link(icu::normalizer::properties::CanonicalComposition, Struct)]
94 #[diplomat::rust_link(
95 icu::normalizer::properties::CanonicalCompositionBorrowed,
96 Struct,
97 hidden
98 )]
99 pub struct CanonicalComposition(pub icu_normalizer::properties::CanonicalComposition);
100
101 impl CanonicalComposition {
102 #[diplomat::rust_link(icu::normalizer::properties::CanonicalComposition::new, FnInStruct)]
104 #[diplomat::rust_link(
105 icu::normalizer::properties::CanonicalCompositionBorrowed::new,
106 FnInStruct,
107 hidden
108 )]
109 #[diplomat::attr(auto, constructor)]
110 #[cfg(feature = "compiled_data")]
111 pub fn create() -> Box<CanonicalComposition> {
112 Box::new(CanonicalComposition(
113 icu_normalizer::properties::CanonicalComposition::new().static_to_owned(),
114 ))
115 }
116
117 #[diplomat::rust_link(icu::normalizer::properties::CanonicalComposition::new, FnInStruct)]
119 #[diplomat::rust_link(
120 icu::normalizer::properties::CanonicalCompositionBorrowed::new,
121 FnInStruct,
122 hidden
123 )]
124 #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_provider")]
125 #[cfg(feature = "buffer_provider")]
126 pub fn create_with_provider(
127 provider: &DataProvider,
128 ) -> Result<Box<CanonicalComposition>, DataError> {
129 Ok(Box::new(CanonicalComposition(
130 icu_normalizer::properties::CanonicalComposition::try_new_with_buffer_provider(
131 provider.get()?,
132 )?,
133 )))
134 }
135
136 #[diplomat::rust_link(
139 icu::normalizer::properties::CanonicalCompositionBorrowed::compose,
140 FnInStruct
141 )]
142 pub fn compose(&self, starter: DiplomatChar, second: DiplomatChar) -> DiplomatChar {
143 match (char::from_u32(starter), char::from_u32(second)) {
144 (Some(starter), Some(second)) => self.0.as_borrowed().compose(starter, second),
145 _ => None,
146 }
147 .unwrap_or('\0') as DiplomatChar
148 }
149 }
150
151 #[diplomat::rust_link(icu::normalizer::properties::Decomposed, Enum)]
155 #[diplomat::out]
156 pub struct Decomposed {
157 first: DiplomatChar,
158 second: DiplomatChar,
159 }
160
161 #[diplomat::opaque]
165 #[diplomat::rust_link(icu::normalizer::properties::CanonicalDecomposition, Struct)]
166 #[diplomat::rust_link(
167 icu::normalizer::properties::CanonicalDecompositionBorrowed,
168 Struct,
169 hidden
170 )]
171 pub struct CanonicalDecomposition(pub icu_normalizer::properties::CanonicalDecomposition);
172
173 impl CanonicalDecomposition {
174 #[diplomat::rust_link(icu::normalizer::properties::CanonicalDecomposition::new, FnInStruct)]
176 #[diplomat::rust_link(
177 icu::normalizer::properties::CanonicalDecompositionBorrowed::new,
178 FnInStruct,
179 hidden
180 )]
181 #[diplomat::attr(auto, constructor)]
182 #[cfg(feature = "compiled_data")]
183 pub fn create() -> Box<CanonicalDecomposition> {
184 Box::new(CanonicalDecomposition(
185 icu_normalizer::properties::CanonicalDecomposition::new().static_to_owned(),
186 ))
187 }
188
189 #[diplomat::rust_link(icu::normalizer::properties::CanonicalDecomposition::new, FnInStruct)]
191 #[diplomat::rust_link(
192 icu::normalizer::properties::CanonicalDecompositionBorrowed::new,
193 FnInStruct,
194 hidden
195 )]
196 #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_provider")]
197 #[cfg(feature = "buffer_provider")]
198 pub fn create_with_provider(
199 provider: &DataProvider,
200 ) -> Result<Box<CanonicalDecomposition>, DataError> {
201 Ok(Box::new(CanonicalDecomposition(
202 icu_normalizer::properties::CanonicalDecomposition::try_new_with_buffer_provider(
203 provider.get()?,
204 )?,
205 )))
206 }
207
208 #[diplomat::rust_link(
210 icu::normalizer::properties::CanonicalDecompositionBorrowed::decompose,
211 FnInStruct
212 )]
213 pub fn decompose(&self, c: DiplomatChar) -> Decomposed {
214 match char::from_u32(c) {
215 Some(c) => match self.0.as_borrowed().decompose(c) {
216 icu_normalizer::properties::Decomposed::Default => Decomposed {
217 first: c as DiplomatChar,
218 second: '\0' as DiplomatChar,
219 },
220 icu_normalizer::properties::Decomposed::Singleton(s) => Decomposed {
221 first: s as DiplomatChar,
222 second: '\0' as DiplomatChar,
223 },
224 icu_normalizer::properties::Decomposed::Expansion(first, second) => {
225 Decomposed {
226 first: first as DiplomatChar,
227 second: second as DiplomatChar,
228 }
229 }
230 },
231 _ => Decomposed {
232 first: c,
233 second: '\0' as DiplomatChar,
234 },
235 }
236 }
237 }
238}