bevy_mod_ffi_guest_sys 0.2.0

Low-level FFI bindings for bevy_mod_ffi guests
Documentation
use bevy_mod_ffi_core::*;

unsafe extern "C" {
    pub fn bevy_param_builder_new(out_builder: *mut *mut param_builder) -> bool;

    pub fn bevy_param_builder_add_query(
        builder: *mut param_builder,
        query_ptr: *mut query_builder,
    ) -> bool;

    pub fn bevy_param_builder_add_commands(builder: *mut param_builder) -> bool;

    pub fn bevy_param_builder_add_deferred_world(builder: *mut param_builder) -> bool;

    pub fn bevy_param_builder_build(
        world_ptr: *mut world,
        builder: *mut param_builder,
        out_state: *mut *mut system_state,
    ) -> bool;

    pub fn bevy_param_builder_drop(builder: *mut param_builder);

    pub fn bevy_dyn_system_param_downcast_query(
        param_ptr: *mut dyn_system_param,
        out_query: *mut *mut query,
    ) -> bool;

    pub fn bevy_dyn_system_param_downcast_commands(
        param_ptr: *mut dyn_system_param,
        out_commands: *mut *mut commands,
    ) -> bool;

    pub fn bevy_dyn_system_param_downcast_deferred_world(
        param_ptr: *mut dyn_system_param,
        out_deferred: *mut *mut deferred_world,
    ) -> bool;

    pub fn bevy_commands_push(
        commands_ptr: *mut commands,
        world_ptr: *mut world,
        f_ptr: *mut (),
        run_command_fn: RunCommandFn,
    ) -> bool;

    pub fn bevy_commands_drop(commands_ptr: *mut commands);
}

#[allow(clippy::missing_safety_doc)]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn bevy_guest_run_command(f_ptr: *mut (), world_ptr: *mut world) {
    type CommandClosure = Box<dyn FnOnce(*mut world)>;

    let f = unsafe { Box::from_raw(f_ptr as *mut CommandClosure) };
    (*f)(world_ptr);
}