rusteal-core 0.8.0

Safe Rust runtime for rusteal (object refs, lifecycle, dynamic calls)
Documentation
use rusteal_ffi::{UClassHandle, UObjectHandle};

use crate::error::{RustealError, RustealResult, check_ffi};
use crate::ffi_dispatch;

#[track_caller]
pub fn create_widget_raw(
    owning_object: UObjectHandle,
    widget_class: UClassHandle,
) -> RustealResult<UObjectHandle> {
    let result = unsafe { ffi_dispatch::widget_create_widget(owning_object, widget_class) };

    if result.is_null() {
        Err(RustealError::invalid_operation(
            "create_widget returned null",
        ))
    } else {
        Ok(result)
    }
}

#[track_caller]
pub fn set_root_widget_raw(
    user_widget: UObjectHandle,
    root_widget: UObjectHandle,
) -> RustealResult<()> {
    check_ffi(unsafe { ffi_dispatch::widget_set_root_widget(user_widget, root_widget) })
}

#[track_caller]
pub fn get_widget_tree_raw(user_widget: UObjectHandle) -> RustealResult<UObjectHandle> {
    let result = unsafe { ffi_dispatch::widget_get_widget_tree(user_widget) };

    if result.is_null() {
        Err(RustealError::invalid_operation(
            "get_widget_tree returned null",
        ))
    } else {
        Ok(result)
    }
}