#![allow(clippy::not_unsafe_ptr_arg_deref)]
use futures::{FutureExt, StreamExt};
use wasm_bindgen::prelude::*;
use super::{WasmFutureReturningPointer, WasmLocalExchange, WasmResultStatus, WasmResultWithPointer};
use crate::{ObjectDescriptor, ObjectExposeContract};
#[wasm_bindgen]
pub fn hakuban_object_expose_contract_new(local_exchange: *mut WasmLocalExchange, descriptor: *mut ObjectDescriptor) -> *mut ObjectExposeContract {
let local_exchange = unsafe { local_exchange.as_mut().unwrap() };
let descriptor = unsafe { descriptor.as_mut().unwrap() };
Box::into_raw(Box::new(local_exchange.local_exchange.object(descriptor.clone()).expose()))
}
#[wasm_bindgen]
pub fn hakuban_object_expose_contract_drop(object_ptr: *mut ObjectExposeContract) {
drop(unsafe { Box::from_raw(object_ptr) });
}
#[wasm_bindgen]
pub fn hakuban_object_expose_contract_terminate(object_expose_pointer: *mut ObjectExposeContract) {
let object_expose: &mut ObjectExposeContract = unsafe { object_expose_pointer.as_mut().unwrap() };
object_expose.terminate();
}
#[wasm_bindgen]
pub fn hakuban_object_expose_contract_next(object_expose_pointer: *mut ObjectExposeContract) -> *mut WasmFutureReturningPointer {
let object_expose: &mut ObjectExposeContract = unsafe { object_expose_pointer.as_mut().unwrap() };
Box::into_raw(Box::new(WasmFutureReturningPointer::new(
object_expose.next().map(|item| item.map(|object_state_sink| Box::into_raw(Box::new(object_state_sink)) as *mut u8).into()),
)))
}
#[wasm_bindgen]
pub fn hakuban_object_expose_contract_ready(object_expose_pointer: *mut ObjectExposeContract) -> WasmResultWithPointer {
let object_expose: &mut ObjectExposeContract = unsafe { object_expose_pointer.as_mut().unwrap() };
if let Some(object_state_sink) = object_expose.ready() {
WasmResultWithPointer::ok(Box::into_raw(Box::new(object_state_sink)))
} else {
WasmResultWithPointer::error(WasmResultStatus::NotAvailable)
}
}