1#![allow(non_snake_case, dead_code)]
27
28use core::ffi::{c_char, c_void};
29use std::ffi::CString;
30
31pub type Handle = *mut c_void;
32
33unsafe extern "C" {
34 fn dlopen(path: *const c_char, mode: i32) -> *mut c_void;
35 fn dlsym(handle: *mut c_void, symbol: *const c_char) -> *mut c_void;
36}
37
38fn sym(h: *mut c_void, name: &core::ffi::CStr) -> *mut c_void {
39 let p = unsafe { dlsym(h, name.as_ptr()) };
40 assert!(!p.is_null(), "Symbol not found: {}", name.to_str().unwrap());
41 p
42}
43
44pub struct Fns {
46 pub text: unsafe extern "C" fn(*const u8, usize) -> Handle,
48 pub styled_text: unsafe extern "C" fn(*const u8, usize, f32, i32, f32, f32, f32, f32) -> Handle,
49 pub system_image: unsafe extern "C" fn(*const u8, usize) -> Handle,
50 pub spacer: unsafe extern "C" fn() -> Handle,
51 pub divider: unsafe extern "C" fn() -> Handle,
52 pub color: unsafe extern "C" fn(f32, f32, f32, f32) -> Handle,
53 pub progress: unsafe extern "C" fn(f32, f32) -> Handle,
54 pub toggle: unsafe extern "C" fn(*const u8, usize, bool) -> Handle,
55 pub textfield: unsafe extern "C" fn(*const u8, usize, *const u8, usize) -> Handle,
56 pub button: unsafe extern "C" fn(
57 *const u8,
58 usize,
59 unsafe extern "C" fn(*mut c_void),
60 *mut c_void,
61 ) -> Handle,
62
63 pub vstack: unsafe extern "C" fn(*const Handle, usize) -> Handle,
65 pub hstack: unsafe extern "C" fn(*const Handle, usize) -> Handle,
66 pub zstack: unsafe extern "C" fn(*const Handle, usize) -> Handle,
67 pub scroll_view: unsafe extern "C" fn(Handle) -> Handle,
68
69 pub padding: unsafe extern "C" fn(Handle, f32) -> Handle,
71 pub frame: unsafe extern "C" fn(Handle, f32, f32) -> Handle,
72 pub background_color: unsafe extern "C" fn(Handle, f32, f32, f32, f32) -> Handle,
73 pub corner_radius: unsafe extern "C" fn(Handle, f32) -> Handle,
74 pub opacity: unsafe extern "C" fn(Handle, f32) -> Handle,
75 pub border: unsafe extern "C" fn(Handle, f32, f32, f32, f32) -> Handle,
76 pub foreground_color: unsafe extern "C" fn(Handle, f32, f32, f32, f32) -> Handle,
77 pub shadow: unsafe extern "C" fn(Handle, f32, f32, f32, f32, f32, f32) -> Handle,
78 pub offset: unsafe extern "C" fn(Handle, f32, f32) -> Handle,
79 pub scale: unsafe extern "C" fn(Handle, f32) -> Handle,
80 pub rotation: unsafe extern "C" fn(Handle, f32) -> Handle,
81 pub hidden: unsafe extern "C" fn(Handle) -> Handle,
82 pub disabled: unsafe extern "C" fn(Handle, bool) -> Handle,
83 pub overlay: unsafe extern "C" fn(Handle, Handle) -> Handle,
84 pub clip_circle: unsafe extern "C" fn(Handle) -> Handle,
85 pub font_system: unsafe extern "C" fn(Handle, f32, i32) -> Handle,
86
87 pub label: unsafe extern "C" fn(*const u8, usize, *const u8, usize) -> Handle,
89 pub slider: unsafe extern "C" fn(f32, f32, f32) -> Handle,
90 pub link: unsafe extern "C" fn(*const u8, usize, *const u8, usize) -> Handle,
91
92 pub on_tap:
94 unsafe extern "C" fn(Handle, unsafe extern "C" fn(*mut c_void), *mut c_void) -> Handle,
95 pub on_long_press:
96 unsafe extern "C" fn(Handle, unsafe extern "C" fn(*mut c_void), *mut c_void) -> Handle,
97
98 pub bound_textfield: unsafe extern "C" fn(
100 *const u8,
101 usize,
102 *const u8,
103 usize,
104 unsafe extern "C" fn(*const u8, usize, *mut c_void),
105 *mut c_void,
106 ) -> Handle,
107 pub bound_toggle: unsafe extern "C" fn(
108 *const u8,
109 usize,
110 bool,
111 unsafe extern "C" fn(bool, *mut c_void),
112 *mut c_void,
113 ) -> Handle,
114 pub bound_slider: unsafe extern "C" fn(
115 f32,
116 f32,
117 f32,
118 unsafe extern "C" fn(f32, *mut c_void),
119 *mut c_void,
120 ) -> Handle,
121
122 pub list: unsafe extern "C" fn(*const Handle, usize) -> Handle,
124 pub sheet: unsafe extern "C" fn(Handle, Handle, bool) -> Handle,
125 pub alert: unsafe extern "C" fn(Handle, *const u8, usize, *const u8, usize, bool) -> Handle,
126 pub animation: unsafe extern "C" fn(Handle, i32) -> Handle,
127
128 pub blur: unsafe extern "C" fn(Handle, f32) -> Handle,
130 pub brightness: unsafe extern "C" fn(Handle, f32) -> Handle,
131 pub saturation: unsafe extern "C" fn(Handle, f32) -> Handle,
132 pub grayscale: unsafe extern "C" fn(Handle, f32) -> Handle,
133 pub help_text: unsafe extern "C" fn(Handle, *const u8, usize) -> Handle,
134 pub line_limit: unsafe extern "C" fn(Handle, i32) -> Handle,
135 pub fixed_size_mod: unsafe extern "C" fn(Handle) -> Handle,
136 pub aspect_ratio: unsafe extern "C" fn(Handle, f32, i32) -> Handle,
137 pub clipped: unsafe extern "C" fn(Handle) -> Handle,
138 pub tint: unsafe extern "C" fn(Handle, f32, f32, f32) -> Handle,
139 pub badge: unsafe extern "C" fn(Handle, i32) -> Handle,
140
141 pub secure_field: unsafe extern "C" fn(*const u8, usize, *const u8, usize) -> Handle,
143 pub text_editor: unsafe extern "C" fn(*const u8, usize) -> Handle,
144 pub stepper: unsafe extern "C" fn(*const u8, usize, i32, i32, i32) -> Handle,
145 pub group_box: unsafe extern "C" fn(*const u8, usize, Handle) -> Handle,
146
147 pub tabview: unsafe extern "C" fn(
149 *const Handle,
150 *const *const u8,
151 *const usize,
152 *const *const u8,
153 *const usize,
154 usize,
155 ) -> Handle,
156 pub bound_picker: unsafe extern "C" fn(
157 *const u8,
158 usize,
159 *const *const u8,
160 *const usize,
161 usize,
162 i32,
163 unsafe extern "C" fn(i32, *mut c_void),
164 *mut c_void,
165 ) -> Handle,
166 pub menu: unsafe extern "C" fn(*const u8, usize, Handle) -> Handle,
167 pub context_menu: unsafe extern "C" fn(Handle, Handle) -> Handle,
168
169 pub navigation_title: unsafe extern "C" fn(Handle, *const u8, usize) -> Handle,
171 pub toolbar: unsafe extern "C" fn(Handle, Handle) -> Handle,
172 pub grid: unsafe extern "C" fn(*const Handle, usize, i32) -> Handle,
173 pub form: unsafe extern "C" fn(*const Handle, usize) -> Handle,
174 pub section: unsafe extern "C" fn(*const u8, usize, *const Handle, usize) -> Handle,
175
176 pub on_appear:
178 unsafe extern "C" fn(Handle, unsafe extern "C" fn(*mut c_void), *mut c_void) -> Handle,
179 pub on_disappear:
180 unsafe extern "C" fn(Handle, unsafe extern "C" fn(*mut c_void), *mut c_void) -> Handle,
181
182 pub bold_mod: unsafe extern "C" fn(Handle) -> Handle,
184 pub italic_mod: unsafe extern "C" fn(Handle) -> Handle,
185
186 pub popover: unsafe extern "C" fn(Handle, Handle, bool) -> Handle,
188
189 pub color_invert: unsafe extern "C" fn(Handle) -> Handle,
191 pub ignores_safe_area: unsafe extern "C" fn(Handle) -> Handle,
192 pub confirmation_dialog: unsafe extern "C" fn(Handle, *const u8, usize, bool, Handle) -> Handle,
193 pub keyboard_shortcut: unsafe extern "C" fn(Handle, *const u8, usize) -> Handle,
194 pub focusable: unsafe extern "C" fn(Handle) -> Handle,
195 pub truncation_mode: unsafe extern "C" fn(Handle, i32) -> Handle,
196 pub multiline_alignment: unsafe extern "C" fn(Handle, i32) -> Handle,
197 pub minimum_scale_factor: unsafe extern "C" fn(Handle, f32) -> Handle,
198
199 pub accessibility_label: unsafe extern "C" fn(Handle, *const u8, usize) -> Handle,
201 pub accessibility_hint: unsafe extern "C" fn(Handle, *const u8, usize) -> Handle,
202 pub accessibility_hidden: unsafe extern "C" fn(Handle, bool) -> Handle,
203 pub accessibility_value: unsafe extern "C" fn(Handle, *const u8, usize) -> Handle,
204
205 pub animation_duration: unsafe extern "C" fn(Handle, i32, f32) -> Handle,
207 pub animation_spring_params: unsafe extern "C" fn(Handle, f32, f32) -> Handle,
208 pub transition: unsafe extern "C" fn(Handle, i32) -> Handle,
209
210 pub on_drag: unsafe extern "C" fn(
212 Handle,
213 unsafe extern "C" fn(f32, f32, *mut c_void),
214 *mut c_void,
215 ) -> Handle,
216 pub on_magnify:
217 unsafe extern "C" fn(Handle, unsafe extern "C" fn(f32, *mut c_void), *mut c_void) -> Handle,
218 pub on_rotate:
219 unsafe extern "C" fn(Handle, unsafe extern "C" fn(f32, *mut c_void), *mut c_void) -> Handle,
220
221 pub geometry_reader: unsafe extern "C" fn(
223 unsafe extern "C" fn(f32, f32, *mut c_void) -> Handle,
224 *mut c_void,
225 ) -> Handle,
226 pub scroll_view_reader: unsafe extern "C" fn(Handle) -> Handle,
227 pub scrollable_id: unsafe extern "C" fn(Handle, *const u8, usize) -> Handle,
228 pub timeline_view: unsafe extern "C" fn(
229 f32,
230 unsafe extern "C" fn(f32, *mut c_void) -> Handle,
231 *mut c_void,
232 ) -> Handle,
233
234 pub with_animation:
236 unsafe extern "C" fn(i32, f32, unsafe extern "C" fn(*mut c_void), *mut c_void),
237 pub matched_geometry: unsafe extern "C" fn(Handle, *const u8, usize) -> Handle,
238 pub task:
239 unsafe extern "C" fn(Handle, unsafe extern "C" fn(*mut c_void), *mut c_void) -> Handle,
240 pub photos_picker: unsafe extern "C" fn(
241 *const u8,
242 usize,
243 unsafe extern "C" fn(*const u8, usize, *mut c_void),
244 *mut c_void,
245 ) -> Handle,
246
247 pub map: unsafe extern "C" fn(f32, f32, f32, f32) -> Handle,
249 pub video_player: unsafe extern "C" fn(*const u8, usize) -> Handle,
250
251 pub searchable: unsafe extern "C" fn(
253 Handle,
254 unsafe extern "C" fn(*const u8, usize, *mut c_void),
255 *mut c_void,
256 ) -> Handle,
257 pub refreshable:
258 unsafe extern "C" fn(Handle, unsafe extern "C" fn(*mut c_void), *mut c_void) -> Handle,
259 pub swipe_actions_delete:
260 unsafe extern "C" fn(Handle, unsafe extern "C" fn(*mut c_void), *mut c_void) -> Handle,
261 pub swipe_actions_custom: unsafe extern "C" fn(Handle, Handle, i32) -> Handle,
262
263 pub blend_mode: unsafe extern "C" fn(Handle, i32) -> Handle,
265 pub mask: unsafe extern "C" fn(Handle, Handle) -> Handle,
266 pub drawing_group: unsafe extern "C" fn(Handle) -> Handle,
267 pub allows_hit_testing: unsafe extern "C" fn(Handle, bool) -> Handle,
268 pub content_shape: unsafe extern "C" fn(Handle, i32) -> Handle,
269 pub safe_area_inset_bottom: unsafe extern "C" fn(Handle, Handle) -> Handle,
270 pub safe_area_inset_top: unsafe extern "C" fn(Handle, Handle) -> Handle,
271 pub list_row_background: unsafe extern "C" fn(Handle, Handle) -> Handle,
272 pub list_row_separator: unsafe extern "C" fn(Handle, bool) -> Handle,
273 pub overlay_aligned: unsafe extern "C" fn(Handle, Handle, i32) -> Handle,
274 pub background_aligned: unsafe extern "C" fn(Handle, Handle, i32) -> Handle,
275 pub preferred_color_scheme: unsafe extern "C" fn(Handle, bool) -> Handle,
276
277 pub app_storage_get_string:
279 unsafe extern "C" fn(*const u8, usize, *mut *mut c_void, *mut usize) -> bool,
280 pub app_storage_set_string: unsafe extern "C" fn(*const u8, usize, *const u8, usize),
281 pub app_storage_get_int: unsafe extern "C" fn(*const u8, usize) -> isize,
282 pub app_storage_set_int: unsafe extern "C" fn(*const u8, usize, isize),
283 pub app_storage_get_bool: unsafe extern "C" fn(*const u8, usize) -> bool,
284 pub app_storage_set_bool: unsafe extern "C" fn(*const u8, usize, bool),
285
286 pub navigation_stack: unsafe extern "C" fn(Handle) -> Handle,
288 pub navigation_link: unsafe extern "C" fn(*const u8, usize, Handle) -> Handle,
289
290 pub on_change_int: unsafe extern "C" fn(
292 Handle,
293 isize,
294 unsafe extern "C" fn(isize, *mut c_void),
295 *mut c_void,
296 ) -> Handle,
297 pub container_relative_frame: unsafe extern "C" fn(Handle, i32) -> Handle,
298 pub canvas_commands: unsafe extern "C" fn(f32, f32, *const f32, usize) -> Handle,
299 pub phase_animation: unsafe extern "C" fn(Handle, i32) -> Handle,
300 pub phase_animation_scale: unsafe extern "C" fn(Handle, *const f32, usize) -> Handle,
301
302 pub animation_bezier: unsafe extern "C" fn(Handle, f32, f32, f32, f32, f32) -> Handle,
304 pub keyframe_animation: unsafe extern "C" fn(Handle, *const f32, usize, bool) -> Handle,
305 pub scroll_reader_create: unsafe extern "C" fn(Handle) -> Handle,
306 pub scroll_to: unsafe extern "C" fn(Handle, *const u8, usize),
307 pub focus_model_create: unsafe extern "C" fn() -> *mut c_void,
308 pub focus_model_set: unsafe extern "C" fn(*mut c_void, *const u8, usize),
309 pub focus_model_clear: unsafe extern "C" fn(*mut c_void),
310 pub focusable_textfield: unsafe extern "C" fn(
311 *const u8,
312 usize,
313 *const u8,
314 usize,
315 *const u8,
316 usize,
317 unsafe extern "C" fn(*const u8, usize, *mut c_void),
318 *mut c_void,
319 *mut c_void,
320 ) -> Handle,
321
322 pub symbol_effect_bounce: unsafe extern "C" fn(Handle) -> Handle,
324 pub symbol_effect_pulse: unsafe extern "C" fn(Handle) -> Handle,
325 pub symbol_effect_variable_color: unsafe extern "C" fn(Handle) -> Handle,
326
327 pub disclosure_group: unsafe extern "C" fn(*const u8, usize, Handle) -> Handle,
329 pub labeled_content: unsafe extern "C" fn(*const u8, usize, Handle) -> Handle,
330 pub navigation_split_view: unsafe extern "C" fn(Handle, Handle) -> Handle,
331 pub content_unavailable:
332 unsafe extern "C" fn(*const u8, usize, *const u8, usize, *const u8, usize) -> Handle,
333 pub share_link: unsafe extern "C" fn(*const u8, usize, *const u8, usize) -> Handle,
334
335 pub async_image: unsafe extern "C" fn(*const u8, usize) -> Handle,
337 pub color_picker_bound: unsafe extern "C" fn(
338 *const u8,
339 usize,
340 f32,
341 f32,
342 f32,
343 unsafe extern "C" fn(f32, f32, f32, *mut c_void),
344 *mut c_void,
345 ) -> Handle,
346 pub date_picker_bound: unsafe extern "C" fn(
347 *const u8,
348 usize,
349 f64,
350 unsafe extern "C" fn(f64, *mut c_void),
351 *mut c_void,
352 ) -> Handle,
353 pub empty_view: unsafe extern "C" fn() -> Handle,
354 pub lazy_hgrid: unsafe extern "C" fn(*const Handle, usize, i32) -> Handle,
355 pub timer_start:
356 unsafe extern "C" fn(f32, unsafe extern "C" fn(*mut c_void), *mut c_void) -> *mut c_void,
357 pub timer_stop: unsafe extern "C" fn(*mut c_void),
358
359 pub release: unsafe extern "C" fn(Handle),
361 pub retain: unsafe extern "C" fn(Handle),
362
363 pub show_window: unsafe extern "C" fn(Handle, *const u8, usize, f32, f32),
365
366 pub snapshot:
368 Option<unsafe extern "C" fn(Handle, f32, f32, *mut *mut c_void, *mut usize) -> bool>,
369 pub snapshot_free: Option<unsafe extern "C" fn(*mut c_void, usize)>,
370 pub compare_png:
371 Option<unsafe extern "C" fn(*const c_void, usize, *const c_void, usize, f32) -> f32>,
372}
373
374#[allow(clippy::missing_transmute_annotations)]
376pub fn load(path: &str) -> Result<Fns, String> {
377 unsafe {
378 dlopen(
380 c"/System/Library/Frameworks/SwiftUI.framework/SwiftUI".as_ptr(),
381 1,
382 );
383
384 let cpath = CString::new(path).unwrap();
385 let h = dlopen(cpath.as_ptr(), 2);
386 if h.is_null() {
387 return Err(format!("Failed to load {path}"));
388 }
389
390 let snap_ptr = dlsym(h, c"snapshot_view_handle".as_ptr());
391 let free_ptr = dlsym(h, c"free_snapshot".as_ptr());
392 let cmp_ptr = dlsym(h, c"compare_png_bytes".as_ptr());
393
394 Ok(Fns {
395 text: std::mem::transmute(sym(h, c"swiftui_text")),
396 styled_text: std::mem::transmute(sym(h, c"swiftui_text_styled")),
397 system_image: std::mem::transmute(sym(h, c"swiftui_system_image")),
398 spacer: std::mem::transmute(sym(h, c"swiftui_spacer")),
399 divider: std::mem::transmute(sym(h, c"swiftui_divider")),
400 color: std::mem::transmute(sym(h, c"swiftui_color")),
401 progress: std::mem::transmute(sym(h, c"swiftui_progress")),
402 toggle: std::mem::transmute(sym(h, c"swiftui_toggle")),
403 textfield: std::mem::transmute(sym(h, c"swiftui_textfield")),
404 button: std::mem::transmute(sym(h, c"swiftui_button")),
405 vstack: std::mem::transmute(sym(h, c"swiftui_vstack")),
406 hstack: std::mem::transmute(sym(h, c"swiftui_hstack")),
407 zstack: std::mem::transmute(sym(h, c"swiftui_zstack")),
408 scroll_view: std::mem::transmute(sym(h, c"swiftui_scroll_view")),
409 padding: std::mem::transmute(sym(h, c"swiftui_padding")),
410 frame: std::mem::transmute(sym(h, c"swiftui_frame")),
411 background_color: std::mem::transmute(sym(h, c"swiftui_background_color")),
412 corner_radius: std::mem::transmute(sym(h, c"swiftui_corner_radius")),
413 opacity: std::mem::transmute(sym(h, c"swiftui_opacity")),
414 border: std::mem::transmute(sym(h, c"swiftui_border")),
415 foreground_color: std::mem::transmute(sym(h, c"swiftui_foreground_color")),
416 shadow: std::mem::transmute(sym(h, c"swiftui_shadow")),
417 offset: std::mem::transmute(sym(h, c"swiftui_offset")),
418 scale: std::mem::transmute(sym(h, c"swiftui_scale")),
419 rotation: std::mem::transmute(sym(h, c"swiftui_rotation")),
420 hidden: std::mem::transmute(sym(h, c"swiftui_hidden")),
421 disabled: std::mem::transmute(sym(h, c"swiftui_disabled")),
422 overlay: std::mem::transmute(sym(h, c"swiftui_overlay")),
423 clip_circle: std::mem::transmute(sym(h, c"swiftui_clip_circle")),
424 font_system: std::mem::transmute(sym(h, c"swiftui_font_system")),
425 label: std::mem::transmute(sym(h, c"swiftui_label")),
426 slider: std::mem::transmute(sym(h, c"swiftui_slider")),
427 link: std::mem::transmute(sym(h, c"swiftui_link")),
428 on_tap: std::mem::transmute(sym(h, c"swiftui_on_tap")),
429 on_long_press: std::mem::transmute(sym(h, c"swiftui_on_long_press")),
430 bound_textfield: std::mem::transmute(sym(h, c"swiftui_bound_textfield")),
431 bound_toggle: std::mem::transmute(sym(h, c"swiftui_bound_toggle")),
432 bound_slider: std::mem::transmute(sym(h, c"swiftui_bound_slider")),
433 list: std::mem::transmute(sym(h, c"swiftui_list")),
434 sheet: std::mem::transmute(sym(h, c"swiftui_sheet")),
435 alert: std::mem::transmute(sym(h, c"swiftui_alert")),
436 animation: std::mem::transmute(sym(h, c"swiftui_animation")),
437 blur: std::mem::transmute(sym(h, c"swiftui_blur")),
438 brightness: std::mem::transmute(sym(h, c"swiftui_brightness")),
439 saturation: std::mem::transmute(sym(h, c"swiftui_saturation")),
440 grayscale: std::mem::transmute(sym(h, c"swiftui_grayscale")),
441 help_text: std::mem::transmute(sym(h, c"swiftui_help")),
442 line_limit: std::mem::transmute(sym(h, c"swiftui_line_limit")),
443 fixed_size_mod: std::mem::transmute(sym(h, c"swiftui_fixed_size")),
444 aspect_ratio: std::mem::transmute(sym(h, c"swiftui_aspect_ratio")),
445 clipped: std::mem::transmute(sym(h, c"swiftui_clipped")),
446 tint: std::mem::transmute(sym(h, c"swiftui_tint")),
447 badge: std::mem::transmute(sym(h, c"swiftui_badge")),
448 secure_field: std::mem::transmute(sym(h, c"swiftui_secure_field")),
449 text_editor: std::mem::transmute(sym(h, c"swiftui_text_editor")),
450 stepper: std::mem::transmute(sym(h, c"swiftui_stepper")),
451 group_box: std::mem::transmute(sym(h, c"swiftui_group_box")),
452 tabview: std::mem::transmute(sym(h, c"swiftui_tabview")),
453 bound_picker: std::mem::transmute(sym(h, c"swiftui_bound_picker")),
454 menu: std::mem::transmute(sym(h, c"swiftui_menu")),
455 context_menu: std::mem::transmute(sym(h, c"swiftui_context_menu")),
456 navigation_title: std::mem::transmute(sym(h, c"swiftui_navigation_title")),
457 toolbar: std::mem::transmute(sym(h, c"swiftui_toolbar")),
458 grid: std::mem::transmute(sym(h, c"swiftui_grid")),
459 form: std::mem::transmute(sym(h, c"swiftui_form")),
460 section: std::mem::transmute(sym(h, c"swiftui_section")),
461 on_appear: std::mem::transmute(sym(h, c"swiftui_on_appear")),
462 on_disappear: std::mem::transmute(sym(h, c"swiftui_on_disappear")),
463 bold_mod: std::mem::transmute(sym(h, c"swiftui_bold")),
464 italic_mod: std::mem::transmute(sym(h, c"swiftui_italic")),
465 popover: std::mem::transmute(sym(h, c"swiftui_popover")),
466 color_invert: std::mem::transmute(sym(h, c"swiftui_color_invert")),
467 ignores_safe_area: std::mem::transmute(sym(h, c"swiftui_ignores_safe_area")),
468 confirmation_dialog: std::mem::transmute(sym(h, c"swiftui_confirmation_dialog")),
469 keyboard_shortcut: std::mem::transmute(sym(h, c"swiftui_keyboard_shortcut")),
470 focusable: std::mem::transmute(sym(h, c"swiftui_focusable")),
471 truncation_mode: std::mem::transmute(sym(h, c"swiftui_truncation_mode")),
472 multiline_alignment: std::mem::transmute(sym(h, c"swiftui_multiline_alignment")),
473 minimum_scale_factor: std::mem::transmute(sym(h, c"swiftui_minimum_scale_factor")),
474 accessibility_label: std::mem::transmute(sym(h, c"swiftui_accessibility_label")),
475 accessibility_hint: std::mem::transmute(sym(h, c"swiftui_accessibility_hint")),
476 accessibility_hidden: std::mem::transmute(sym(h, c"swiftui_accessibility_hidden")),
477 accessibility_value: std::mem::transmute(sym(h, c"swiftui_accessibility_value")),
478 disclosure_group: std::mem::transmute(sym(h, c"swiftui_disclosure_group")),
479 labeled_content: std::mem::transmute(sym(h, c"swiftui_labeled_content")),
480 navigation_split_view: std::mem::transmute(sym(h, c"swiftui_navigation_split_view")),
481 content_unavailable: std::mem::transmute(sym(h, c"swiftui_content_unavailable")),
482 share_link: std::mem::transmute(sym(h, c"swiftui_share_link")),
483 blend_mode: std::mem::transmute(sym(h, c"swiftui_blend_mode")),
484 mask: std::mem::transmute(sym(h, c"swiftui_mask")),
485 drawing_group: std::mem::transmute(sym(h, c"swiftui_drawing_group")),
486 allows_hit_testing: std::mem::transmute(sym(h, c"swiftui_allows_hit_testing")),
487 content_shape: std::mem::transmute(sym(h, c"swiftui_content_shape")),
488 safe_area_inset_bottom: std::mem::transmute(sym(h, c"swiftui_safe_area_inset_bottom")),
489 safe_area_inset_top: std::mem::transmute(sym(h, c"swiftui_safe_area_inset_top")),
490 list_row_background: std::mem::transmute(sym(h, c"swiftui_list_row_background")),
491 list_row_separator: std::mem::transmute(sym(h, c"swiftui_list_row_separator")),
492 overlay_aligned: std::mem::transmute(sym(h, c"swiftui_overlay_aligned")),
493 background_aligned: std::mem::transmute(sym(h, c"swiftui_background_aligned")),
494 preferred_color_scheme: std::mem::transmute(sym(h, c"swiftui_preferred_color_scheme")),
495 app_storage_get_string: std::mem::transmute(sym(h, c"swiftui_app_storage_get_string")),
496 app_storage_set_string: std::mem::transmute(sym(h, c"swiftui_app_storage_set_string")),
497 app_storage_get_int: std::mem::transmute(sym(h, c"swiftui_app_storage_get_int")),
498 app_storage_set_int: std::mem::transmute(sym(h, c"swiftui_app_storage_set_int")),
499 app_storage_get_bool: std::mem::transmute(sym(h, c"swiftui_app_storage_get_bool")),
500 app_storage_set_bool: std::mem::transmute(sym(h, c"swiftui_app_storage_set_bool")),
501 navigation_stack: std::mem::transmute(sym(h, c"swiftui_navigation_stack")),
502 navigation_link: std::mem::transmute(sym(h, c"swiftui_navigation_link")),
503 on_change_int: std::mem::transmute(sym(h, c"swiftui_on_change_int")),
504 container_relative_frame: std::mem::transmute(sym(
505 h,
506 c"swiftui_container_relative_frame",
507 )),
508 canvas_commands: std::mem::transmute(sym(h, c"swiftui_canvas_commands")),
509 phase_animation: std::mem::transmute(sym(h, c"swiftui_phase_animation")),
510 phase_animation_scale: std::mem::transmute(sym(h, c"swiftui_phase_animation_scale")),
511 animation_bezier: std::mem::transmute(sym(h, c"swiftui_animation_bezier")),
512 keyframe_animation: std::mem::transmute(sym(h, c"swiftui_keyframe_animation")),
513 scroll_reader_create: std::mem::transmute(sym(h, c"swiftui_scroll_reader_create")),
514 scroll_to: std::mem::transmute(sym(h, c"swiftui_scroll_to")),
515 focus_model_create: std::mem::transmute(sym(h, c"swiftui_focus_model_create")),
516 focus_model_set: std::mem::transmute(sym(h, c"swiftui_focus_model_set")),
517 focus_model_clear: std::mem::transmute(sym(h, c"swiftui_focus_model_clear")),
518 focusable_textfield: std::mem::transmute(sym(h, c"swiftui_focusable_textfield")),
519 async_image: std::mem::transmute(sym(h, c"swiftui_async_image")),
520 color_picker_bound: std::mem::transmute(sym(h, c"swiftui_color_picker_bound")),
521 date_picker_bound: std::mem::transmute(sym(h, c"swiftui_date_picker_bound")),
522 empty_view: std::mem::transmute(sym(h, c"swiftui_empty_view")),
523 lazy_hgrid: std::mem::transmute(sym(h, c"swiftui_lazy_hgrid")),
524 timer_start: std::mem::transmute(sym(h, c"swiftui_timer_start")),
525 timer_stop: std::mem::transmute(sym(h, c"swiftui_timer_stop")),
526 symbol_effect_bounce: std::mem::transmute(sym(h, c"swiftui_symbol_effect_bounce")),
527 symbol_effect_pulse: std::mem::transmute(sym(h, c"swiftui_symbol_effect_pulse")),
528 symbol_effect_variable_color: std::mem::transmute(sym(
529 h,
530 c"swiftui_symbol_effect_variable_color",
531 )),
532 animation_duration: std::mem::transmute(sym(h, c"swiftui_animation_duration")),
533 animation_spring_params: std::mem::transmute(sym(
534 h,
535 c"swiftui_animation_spring_params",
536 )),
537 transition: std::mem::transmute(sym(h, c"swiftui_transition")),
538 on_drag: std::mem::transmute(sym(h, c"swiftui_on_drag")),
539 on_magnify: std::mem::transmute(sym(h, c"swiftui_on_magnify")),
540 on_rotate: std::mem::transmute(sym(h, c"swiftui_on_rotate")),
541 geometry_reader: std::mem::transmute(sym(h, c"swiftui_geometry_reader")),
542 scroll_view_reader: std::mem::transmute(sym(h, c"swiftui_scroll_view_reader")),
543 scrollable_id: std::mem::transmute(sym(h, c"swiftui_scrollable_id")),
544 timeline_view: std::mem::transmute(sym(h, c"swiftui_timeline_view")),
545 with_animation: std::mem::transmute(sym(h, c"swiftui_with_animation")),
546 matched_geometry: std::mem::transmute(sym(h, c"swiftui_matched_geometry")),
547 task: std::mem::transmute(sym(h, c"swiftui_task")),
548 photos_picker: std::mem::transmute(sym(h, c"swiftui_photos_picker")),
549 map: std::mem::transmute(sym(h, c"swiftui_map")),
550 video_player: std::mem::transmute(sym(h, c"swiftui_video_player")),
551 searchable: std::mem::transmute(sym(h, c"swiftui_searchable")),
552 refreshable: std::mem::transmute(sym(h, c"swiftui_refreshable")),
553 swipe_actions_delete: std::mem::transmute(sym(h, c"swiftui_swipe_actions_delete")),
554 swipe_actions_custom: std::mem::transmute(sym(h, c"swiftui_swipe_actions_custom")),
555 release: std::mem::transmute(sym(h, c"swiftui_release")),
556 retain: std::mem::transmute(sym(h, c"swiftui_retain")),
557 show_window: std::mem::transmute(sym(h, c"swiftui_show_window")),
558 snapshot: if snap_ptr.is_null() {
559 None
560 } else {
561 Some(std::mem::transmute(snap_ptr))
562 },
563 snapshot_free: if free_ptr.is_null() {
564 None
565 } else {
566 Some(std::mem::transmute(free_ptr))
567 },
568 compare_png: if cmp_ptr.is_null() {
569 None
570 } else {
571 Some(std::mem::transmute(cmp_ptr))
572 },
573 })
574 }
575}