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 use crate::unstable::properties_iter::ffi::CodePointRangeIterator;
12 use crate::unstable::properties_sets::ffi::CodePointSetData;
13 #[cfg(feature = "buffer_provider")]
14 use crate::unstable::{errors::ffi::DataError, provider::ffi::DataProvider};
15
16 #[diplomat::opaque]
17 #[diplomat::rust_link(icu::properties::script::ScriptWithExtensions, Struct)]
19 pub struct ScriptWithExtensions(pub icu_properties::script::ScriptWithExtensions);
20
21 #[diplomat::opaque]
22 #[diplomat::rust_link(icu::properties::script::ScriptWithExtensionsBorrowed, Struct)]
24 #[diplomat::attr(demo_gen, disable)] pub struct ScriptWithExtensionsBorrowed<'a>(
26 pub icu_properties::script::ScriptWithExtensionsBorrowed<'a>,
27 );
28 #[diplomat::opaque]
29 #[diplomat::rust_link(icu::properties::script::ScriptExtensionsSet, Struct)]
31 #[diplomat::attr(demo_gen, disable)] pub struct ScriptExtensionsSet<'a>(pub icu_properties::script::ScriptExtensionsSet<'a>);
33
34 impl ScriptWithExtensions {
35 #[diplomat::rust_link(icu::properties::script::ScriptWithExtensions::new, FnInStruct)]
37 #[diplomat::rust_link(
38 icu::properties::script::ScriptWithExtensionsBorrowed::new,
39 FnInStruct,
40 hidden
41 )]
42 #[diplomat::attr(auto, constructor)]
43 #[cfg(feature = "compiled_data")]
44 pub fn create() -> Box<ScriptWithExtensions> {
45 Box::new(ScriptWithExtensions(
46 icu_properties::script::ScriptWithExtensions::new().static_to_owned(),
47 ))
48 }
49
50 #[diplomat::rust_link(icu::properties::script::ScriptWithExtensions::new, FnInStruct)]
52 #[diplomat::rust_link(
53 icu::properties::script::ScriptWithExtensionsBorrowed::new,
54 FnInStruct,
55 hidden
56 )]
57 #[diplomat::attr(all(supports = fallible_constructors, supports = named_constructors), named_constructor = "with_provider")]
58 #[cfg(feature = "buffer_provider")]
59 pub fn create_with_provider(
60 provider: &DataProvider,
61 ) -> Result<Box<ScriptWithExtensions>, DataError> {
62 Ok(Box::new(ScriptWithExtensions(
63 icu_properties::script::ScriptWithExtensions::try_new_with_buffer_provider(
64 provider.get()?,
65 )?,
66 )))
67 }
68
69 #[diplomat::rust_link(
71 icu::properties::script::ScriptWithExtensionsBorrowed::get_script_val,
72 FnInStruct
73 )]
74 #[diplomat::rust_link(
75 icu::properties::script::ScriptWithExtensionsBorrowed::get_script_val32,
76 FnInStruct,
77 hidden
78 )]
79 pub fn get_script_val(&self, ch: DiplomatChar) -> u16 {
80 self.0.as_borrowed().get_script_val32(ch).to_icu4c_value()
81 }
82
83 #[diplomat::rust_link(
85 icu::properties::script::ScriptWithExtensionsBorrowed::has_script,
86 FnInStruct
87 )]
88 #[diplomat::rust_link(
89 icu::properties::script::ScriptWithExtensionsBorrowed::has_script32,
90 FnInStruct,
91 hidden
92 )]
93 pub fn has_script(&self, ch: DiplomatChar, script: u16) -> bool {
94 self.0
95 .as_borrowed()
96 .has_script32(ch, icu_properties::props::Script::from_icu4c_value(script))
97 }
98
99 #[diplomat::rust_link(
101 icu::properties::script::ScriptWithExtensions::as_borrowed,
102 FnInStruct
103 )]
104 #[diplomat::attr(auto, getter)]
105 pub fn as_borrowed<'a>(&'a self) -> Box<ScriptWithExtensionsBorrowed<'a>> {
106 Box::new(ScriptWithExtensionsBorrowed(self.0.as_borrowed()))
107 }
108
109 #[diplomat::rust_link(
111 icu::properties::script::ScriptWithExtensionsBorrowed::get_script_extensions_ranges,
112 FnInStruct
113 )]
114 pub fn iter_ranges_for_script<'a>(
115 &'a self,
116 script: u16,
117 ) -> Box<CodePointRangeIterator<'a>> {
118 Box::new(CodePointRangeIterator(Box::new(
119 self.0.as_borrowed().get_script_extensions_ranges(
120 icu_properties::props::Script::from_icu4c_value(script),
121 ),
122 )))
123 }
124 }
125
126 impl<'a> ScriptWithExtensionsBorrowed<'a> {
127 #[diplomat::rust_link(
129 icu::properties::script::ScriptWithExtensionsBorrowed::get_script_val,
130 FnInStruct
131 )]
132 #[diplomat::rust_link(
134 icu::properties::script::ScriptWithExtensionsBorrowed::get_script_val32,
135 FnInStruct,
136 hidden
137 )]
138 pub fn get_script_val(&self, ch: DiplomatChar) -> u16 {
139 self.0.get_script_val32(ch).to_icu4c_value()
140 }
141 #[diplomat::rust_link(
143 icu::properties::script::ScriptWithExtensionsBorrowed::get_script_extensions_val,
144 FnInStruct
145 )]
146 #[diplomat::rust_link(
147 icu::properties::script::ScriptWithExtensionsBorrowed::get_script_extensions_val32,
148 FnInStruct,
149 hidden
150 )]
151 pub fn get_script_extensions_val(&self, ch: DiplomatChar) -> Box<ScriptExtensionsSet<'a>> {
152 Box::new(ScriptExtensionsSet(self.0.get_script_extensions_val32(ch)))
153 }
154 #[diplomat::rust_link(
156 icu::properties::script::ScriptWithExtensionsBorrowed::has_script,
157 FnInStruct
158 )]
159 #[diplomat::rust_link(
160 icu::properties::script::ScriptWithExtensionsBorrowed::has_script32,
161 FnInStruct,
162 hidden
163 )]
164 pub fn has_script(&self, ch: DiplomatChar, script: u16) -> bool {
165 self.0
166 .has_script32(ch, icu_properties::props::Script::from_icu4c_value(script))
167 }
168
169 #[diplomat::rust_link(
172 icu::properties::script::ScriptWithExtensionsBorrowed::get_script_extensions_set,
173 FnInStruct
174 )]
175 pub fn get_script_extensions_set(&self, script: u16) -> Box<CodePointSetData> {
176 let list = self
177 .0
178 .get_script_extensions_set(icu_properties::props::Script::from_icu4c_value(script))
179 .into_owned();
180 let set = icu_properties::CodePointSetData::from_code_point_inversion_list(list);
181 Box::new(CodePointSetData(set))
182 }
183 }
184 impl<'a> ScriptExtensionsSet<'a> {
185 #[diplomat::rust_link(icu::properties::script::ScriptExtensionsSet::contains, FnInStruct)]
187 pub fn contains(&self, script: u16) -> bool {
188 self.0
189 .contains(&icu_properties::props::Script::from_icu4c_value(script))
190 }
191
192 #[diplomat::rust_link(icu::properties::script::ScriptExtensionsSet::iter, FnInStruct)]
194 #[diplomat::attr(auto, getter)]
195 pub fn count(&self) -> usize {
196 self.0.array_len()
197 }
198
199 #[diplomat::rust_link(icu::properties::script::ScriptExtensionsSet::iter, FnInStruct)]
201 pub fn script_at(&self, index: usize) -> Option<u16> {
202 self.0.array_get(index).map(|x| x.to_icu4c_value())
203 }
204 }
205}