Skip to main content

afia_component_sys/
lib.rs

1#![deny(missing_docs)]
2#![doc = include_str!("../README.md")]
3
4use std::ffi::c_void;
5
6/// A pointer and length pair for a UTF-8 string.
7#[repr(C)]
8#[allow(missing_docs)]
9pub struct AllocatedString {
10    pub pointer: *mut u8,
11    pub len: usize,
12}
13
14// EmulatedImports
15#[link(name = "afia_component")]
16#[allow(missing_docs)]
17extern "C" {
18    pub fn new_emulated_imports() -> *mut std::ffi::c_void;
19    pub fn free_emulated_imports(testable_imports: *mut std::ffi::c_void);
20
21    pub fn emulated_imports_dom_outer_html(
22        testable_component_imports: *mut std::ffi::c_void,
23        dom_node_handle: i64,
24    ) -> AllocatedString;
25
26    pub fn emulated_imports_set_event_handler(
27        imports: *mut c_void,
28        handle_event: extern "C" fn(event_handle: i64, ctx: *mut c_void),
29    );
30
31    pub fn free_emulated_component_imports(testable_component_imports: *mut std::ffi::c_void);
32}
33
34// Strings
35#[allow(missing_docs)]
36extern "C" {
37    pub fn free_allocated_string(allocated_string: AllocatedString);
38}
39
40// ComponentImports
41#[link(name = "afia_component")]
42#[allow(missing_docs)]
43extern "C" {
44    pub fn output_may_have_changed(imports: *const c_void, output_id: i32);
45
46    pub fn create_element(
47        imports: *const c_void,
48        tag_name_ptr: *const u8,
49        tag_name_len: usize,
50    ) -> i64;
51    pub fn create_text(imports: *const c_void, text_ptr: *const u8, text_len: usize) -> i64;
52
53    pub fn dom_element_set_attribute(
54        imports: *const c_void,
55        elem: i64,
56        key_ptr: *const u8,
57        key_len: usize,
58        val_ptr: *const u8,
59        val_len: usize,
60    );
61    pub fn element_get_attribute(
62        imports: *const c_void,
63        elem: i64,
64        key_ptr: *const u8,
65        key_len: usize,
66        out_ptr: *mut u8,
67        out_len: usize,
68    ) -> i32;
69    pub fn dom_element_remove_attribute(
70        imports: *const c_void,
71        elem: i64,
72        key_ptr: *const u8,
73        key_len: usize,
74    );
75
76    pub fn dom_element_append_child(imports: *const c_void, parent: i64, child: i64);
77
78    pub fn input_element_value(
79        imports: *const c_void,
80        elem: i64,
81        out_ptr: *mut u8,
82        out_len: usize,
83    ) -> i32;
84
85    pub fn dialog_element_show_modal(imports: *const c_void, elem: i64);
86
87    pub fn dialog_element_close(imports: *const c_void, elem: i64);
88
89    pub fn dom_node_get_property_string(
90        imports: *const c_void,
91        node: i64,
92        key_ptr: *const u8,
93        key_len: usize,
94        out_ptr: *mut u8,
95        out_size: usize,
96    ) -> i32;
97    pub fn dom_node_get_property_bool(
98        imports: *const c_void,
99        node: i64,
100        key_ptr: *const u8,
101        key_len: usize,
102    ) -> i32;
103    pub fn dom_node_set_property_string(
104        imports: *const c_void,
105        node: i64,
106        key_ptr: *const u8,
107        key_len: usize,
108        val_ptr: *const u8,
109        val_len: usize,
110    );
111    pub fn dom_node_set_property_bool(
112        imports: *const c_void,
113        node: i64,
114        key_ptr: *const u8,
115        key_len: usize,
116        value: i32,
117    ) -> i32;
118
119    pub fn dom_element_set_text_content(
120        imports: *const c_void,
121        element: i64,
122        text_ptr: *const u8,
123        text_len: usize,
124    );
125
126    pub fn dom_element_previous_element_sibling(imports: *const c_void, element: i64) -> i64;
127    pub fn dom_element_next_element_sibling(imports: *const c_void, element: i64) -> i64;
128
129    pub fn dom_element_add_event_listener(
130        imports: *const c_void,
131        element: i64,
132        event_name_ptr: *const u8,
133        event_name_len: usize,
134        ctx: isize,
135    ) -> i64;
136
137    pub fn dom_event_prevent_default(imports: *const c_void, event_handle: i64);
138    pub fn dom_event_target(imports: *const c_void, event_handle: i64) -> i64;
139
140    pub fn local_storage_get_item(
141        imports: *const c_void,
142        key_ptr: *const u8,
143        key_len: usize,
144        out_ptr: *mut u8,
145        out_size: usize,
146    ) -> i32;
147    pub fn local_storage_set_item(
148        imports: *const c_void,
149        key_ptr: *const u8,
150        key_len: usize,
151        value_ptr: *const u8,
152        value_size: usize,
153    );
154
155    pub fn element_tag_name(
156        imports: *const c_void,
157        element: i64,
158        out_ptr: *mut u8,
159        out_len: usize,
160    ) -> i32;
161
162    pub fn element_inner_text(
163        imports: *const c_void,
164        element: i64,
165        out_ptr: *mut u8,
166        out_len: usize,
167    ) -> i32;
168
169    pub fn element_click(imports: *const c_void, element: i64);
170
171    pub fn element_child_nodes(imports: *const c_void, element: i64) -> i64;
172    pub fn node_list_item(imports: *const c_void, node_list: i64, item_idx: i32) -> i64;
173
174    pub fn node_type(imports: *const c_void, node: i64) -> i32;
175    pub fn parent_node(imports: *const c_void, node: i64) -> i64;
176
177    pub fn initialize_stripe(imports: *const std::ffi::c_void, context: isize);
178    pub fn create_stripe_elements(
179        imports: *const std::ffi::c_void,
180        stripe_js_instance_handle: i64,
181        amount: u32,
182    ) -> i64;
183    pub fn submit_stripe_elements(
184        imports: *const std::ffi::c_void,
185        stripe_elements_handle: i64,
186        context: isize,
187    );
188}