use phlow::{AnySendObject, ListViewInstance, ViewInstance};
use string_box::StringBox;
use value_box::{BorrowedPtr, BoxerError, OwnedPtr, ReturnBoxerResult};
use crate::with_view_instance;
#[unsafe(no_mangle)]
pub extern "C" fn phlow_list_view_instance_get_items_count(
view_instance: BorrowedPtr<Box<dyn ViewInstance>>,
) -> usize {
with_view_instance(view_instance, |view_instance: &ListViewInstance| {
Ok(view_instance.items_count())
})
.or_log(0)
}
#[unsafe(no_mangle)]
pub extern "C" fn phlow_list_view_instance_get_item_text_at(
view_instance: BorrowedPtr<Box<dyn ViewInstance>>,
index: usize,
mut item_text: BorrowedPtr<StringBox>,
) {
with_view_instance(view_instance, |view_instance: &ListViewInstance| {
view_instance
.get_item_text(index)
.ok_or_else(|| {
BoxerError::AnyError(format!("List item at {} does not exist", index).into())
})
.and_then(|text| item_text.with_mut_ok(|item_text| item_text.set_string(text.clone())))
})
.log();
}
#[unsafe(no_mangle)]
pub extern "C" fn phlow_list_view_instance_get_send_at(
view_instance: BorrowedPtr<Box<dyn ViewInstance>>,
index: usize,
) -> OwnedPtr<AnySendObject> {
with_view_instance(view_instance, |view_instance: &ListViewInstance| {
view_instance
.get_item_to_send(index)
.ok_or_else(|| BoxerError::AnyError(format!("Item at {} does not exist", index).into()))
.map(OwnedPtr::new)
})
.or_log(OwnedPtr::null())
}