#![allow(clippy::not_unsafe_ptr_arg_deref)]
use futures::{FutureExt, StreamExt};
use wasm_bindgen::prelude::*;
use super::{WasmFutureReturningPointer, WasmLocalExchange};
use crate::{TagDescriptor, TagExposeContract};
#[wasm_bindgen]
pub fn hakuban_tag_expose_contract_new(local_exchange: *mut WasmLocalExchange, descriptor: *mut TagDescriptor) -> *mut TagExposeContract {
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.tag(descriptor.clone()).expose()))
}
#[wasm_bindgen]
pub fn hakuban_tag_expose_contract_drop(tag_expose_contract_pointer: *mut TagExposeContract) {
drop(unsafe { Box::from_raw(tag_expose_contract_pointer) });
}
#[wasm_bindgen]
pub fn hakuban_tag_expose_contract_terminate(tag_expose_pointer: *mut TagExposeContract) {
let tag_expose: &mut TagExposeContract = unsafe { tag_expose_pointer.as_mut().unwrap() };
tag_expose.terminate();
}
#[wasm_bindgen]
pub fn hakuban_tag_expose_contract_next(tag_expose_pointer: *mut TagExposeContract) -> *mut WasmFutureReturningPointer {
let tag_expose = unsafe { tag_expose_pointer.as_mut().unwrap() };
Box::into_raw(Box::new(WasmFutureReturningPointer::new(
tag_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_tag_expose_contract_ready(tag_expose_pointer: *mut TagExposeContract) -> Box<[u32]> {
let tag_expose: &mut TagExposeContract = unsafe { tag_expose_pointer.as_mut().unwrap() };
let ready_object_state_sinks: Vec<u32> =
tag_expose.ready().into_iter().map(|object_state_sink| Box::into_raw(Box::new(object_state_sink)) as u32).collect();
ready_object_state_sinks.into_boxed_slice()
}