fui-rs 0.2.3-alpha1

Retained-mode Rust UI SDK for EffinDOM
Documentation
use crate::ffi;

pub fn can_navigate_back() -> bool {
    unsafe { ffi::fui_can_navigate_back() }
}

pub fn can_navigate_forward() -> bool {
    unsafe { ffi::fui_can_navigate_forward() }
}

pub fn navigate_back() {
    unsafe { ffi::fui_navigate_back() }
}

pub fn navigate_forward() {
    unsafe { ffi::fui_navigate_forward() }
}

pub fn navigate_to(target: &str, open_in_new_tab: bool) {
    let bytes = target.as_bytes();
    unsafe {
        ffi::fui_navigate_to(
            if bytes.is_empty() {
                0
            } else {
                bytes.as_ptr() as usize
            },
            bytes.len() as u32,
            open_in_new_tab,
        )
    }
}

#[cfg(test)]
mod tests {
    use crate::ffi::{self, Call};

    #[test]
    fn navigate_to_emits_host_call() {
        ffi::test::reset();
        super::navigate_to("/docs", true);
        let calls = ffi::test::take_calls();
        assert!(calls.iter().any(|call| matches!(
            call,
            Call::NavigateTo { target, open_in_new_tab } if target == "/docs" && *open_in_new_tab
        )));
    }
}