phlow-ffi 3.0.0

Provides C-like api to the phlow crates
Documentation
use phlow::ViewInstance;
use string_box::StringBox;
use value_box::{BorrowedPtr, OwnedPtr, ReturnBoxerResult};

#[unsafe(no_mangle)]
pub extern "C" fn phlow_view_instance_get_type(
    view_instance: BorrowedPtr<Box<dyn ViewInstance>>,
    mut view_type: BorrowedPtr<StringBox>,
) {
    view_instance
        .with_ref(|view_instance| {
            view_type.with_mut_ok(|view_type| {
                view_type.set_string(view_instance.get_view_type().to_string())
            })
        })
        .log();
}

#[unsafe(no_mangle)]
pub extern "C" fn phlow_view_instance_get_title(
    view_instance: BorrowedPtr<Box<dyn ViewInstance>>,
    mut view_title: BorrowedPtr<StringBox>,
) {
    view_instance
        .with_ref(|view_instance| {
            view_title.with_mut_ok(|view_title| {
                view_title.set_string(view_instance.get_title().to_string())
            })
        })
        .log();
}

#[unsafe(no_mangle)]
pub extern "C" fn phlow_view_instance_get_priority(
    view_instance: BorrowedPtr<Box<dyn ViewInstance>>,
) -> usize {
    view_instance
        .with_ref_ok(|view_instance| view_instance.get_priority())
        .or_log(0)
}

#[unsafe(no_mangle)]
pub extern "C" fn phlow_view_instance_drop(view_instance: OwnedPtr<Box<dyn ViewInstance>>) {
    drop(view_instance);
}