afia-component-sys 0.0.2

A low-level Rust wrapper for `libafia_component`.
Documentation
#![deny(missing_docs)]
#![doc = include_str!("../README.md")]

use std::ffi::c_void;

/// A pointer and length pair for a UTF-8 string.
#[repr(C)]
#[allow(missing_docs)]
pub struct AllocatedString {
    pub pointer: *mut u8,
    pub len: usize,
}

// EmulatedImports
#[link(name = "afia_component")]
#[allow(missing_docs)]
extern "C" {
    pub fn new_emulated_imports() -> *mut std::ffi::c_void;
    pub fn free_emulated_imports(testable_imports: *mut std::ffi::c_void);

    pub fn emulated_imports_dom_outer_html(
        testable_component_imports: *mut std::ffi::c_void,
        dom_node_handle: i64,
    ) -> AllocatedString;

    pub fn emulated_imports_set_event_handler(
        imports: *mut c_void,
        handle_event: extern "C" fn(event_handle: i64, ctx: *mut c_void),
    );

    pub fn free_emulated_component_imports(testable_component_imports: *mut std::ffi::c_void);
}

// Strings
#[allow(missing_docs)]
extern "C" {
    pub fn free_allocated_string(allocated_string: AllocatedString);
}

// ComponentImports
#[link(name = "afia_component")]
#[allow(missing_docs)]
extern "C" {
    pub fn output_may_have_changed(imports: *const c_void, output_id: i32);

    pub fn create_element(
        imports: *const c_void,
        tag_name_ptr: *const u8,
        tag_name_len: usize,
    ) -> i64;
    pub fn create_text(imports: *const c_void, text_ptr: *const u8, text_len: usize) -> i64;

    pub fn dom_element_set_attribute(
        imports: *const c_void,
        elem: i64,
        key_ptr: *const u8,
        key_len: usize,
        val_ptr: *const u8,
        val_len: usize,
    );
    pub fn element_get_attribute(
        imports: *const c_void,
        elem: i64,
        key_ptr: *const u8,
        key_len: usize,
        out_ptr: *mut u8,
        out_len: usize,
    ) -> i32;
    pub fn dom_element_remove_attribute(
        imports: *const c_void,
        elem: i64,
        key_ptr: *const u8,
        key_len: usize,
    );

    pub fn dom_element_append_child(imports: *const c_void, parent: i64, child: i64);

    pub fn input_element_value(
        imports: *const c_void,
        elem: i64,
        out_ptr: *mut u8,
        out_len: usize,
    ) -> i32;

    pub fn dialog_element_show_modal(imports: *const c_void, elem: i64);

    pub fn dialog_element_close(imports: *const c_void, elem: i64);

    pub fn dom_node_get_property_string(
        imports: *const c_void,
        node: i64,
        key_ptr: *const u8,
        key_len: usize,
        out_ptr: *mut u8,
        out_size: usize,
    ) -> i32;
    pub fn dom_node_get_property_bool(
        imports: *const c_void,
        node: i64,
        key_ptr: *const u8,
        key_len: usize,
    ) -> i32;
    pub fn dom_node_set_property_string(
        imports: *const c_void,
        node: i64,
        key_ptr: *const u8,
        key_len: usize,
        val_ptr: *const u8,
        val_len: usize,
    );
    pub fn dom_node_set_property_bool(
        imports: *const c_void,
        node: i64,
        key_ptr: *const u8,
        key_len: usize,
        value: i32,
    ) -> i32;

    pub fn dom_element_set_text_content(
        imports: *const c_void,
        element: i64,
        text_ptr: *const u8,
        text_len: usize,
    );

    pub fn dom_element_previous_element_sibling(imports: *const c_void, element: i64) -> i64;
    pub fn dom_element_next_element_sibling(imports: *const c_void, element: i64) -> i64;

    pub fn dom_element_add_event_listener(
        imports: *const c_void,
        element: i64,
        event_name_ptr: *const u8,
        event_name_len: usize,
        ctx: isize,
    ) -> i64;

    pub fn dom_event_prevent_default(imports: *const c_void, event_handle: i64);
    pub fn dom_event_target(imports: *const c_void, event_handle: i64) -> i64;

    pub fn local_storage_get_item(
        imports: *const c_void,
        key_ptr: *const u8,
        key_len: usize,
        out_ptr: *mut u8,
        out_size: usize,
    ) -> i32;
    pub fn local_storage_set_item(
        imports: *const c_void,
        key_ptr: *const u8,
        key_len: usize,
        value_ptr: *const u8,
        value_size: usize,
    );

    pub fn element_tag_name(
        imports: *const c_void,
        element: i64,
        out_ptr: *mut u8,
        out_len: usize,
    ) -> i32;

    pub fn element_inner_text(
        imports: *const c_void,
        element: i64,
        out_ptr: *mut u8,
        out_len: usize,
    ) -> i32;

    pub fn element_click(imports: *const c_void, element: i64);

    pub fn element_child_nodes(imports: *const c_void, element: i64) -> i64;
    pub fn node_list_item(imports: *const c_void, node_list: i64, item_idx: i32) -> i64;

    pub fn node_type(imports: *const c_void, node: i64) -> i32;
    pub fn parent_node(imports: *const c_void, node: i64) -> i64;

    pub fn initialize_stripe(imports: *const std::ffi::c_void, context: isize);
    pub fn create_stripe_elements(
        imports: *const std::ffi::c_void,
        stripe_js_instance_handle: i64,
        amount: u32,
    ) -> i64;
    pub fn submit_stripe_elements(
        imports: *const std::ffi::c_void,
        stripe_elements_handle: i64,
        context: isize,
    );
}