hakuban 0.7.2

Data-object sharing library
Documentation
#![allow(clippy::not_unsafe_ptr_arg_deref)]

use futures::{FutureExt, StreamExt};
use wasm_bindgen::prelude::*;

use super::{wasm_future::WasmFutureReturningPointer, WasmLocalExchange, WasmResultStatus, WasmResultWithPointer};
use crate::{ObjectDescriptor, ObjectObserveContract};



#[wasm_bindgen]
pub fn hakuban_object_observe_contract_new(local_exchange: *mut WasmLocalExchange, descriptor: *mut ObjectDescriptor) -> *mut ObjectObserveContract {
	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()).observe()))
}


#[wasm_bindgen]
pub fn hakuban_object_observe_contract_drop(object_ptr: *mut ObjectObserveContract) {
	drop(unsafe { Box::from_raw(object_ptr) });
}


#[wasm_bindgen]
pub fn hakuban_object_observe_contract_terminate(object_observe_pointer: *mut ObjectObserveContract) {
	let object_observe: &mut ObjectObserveContract = unsafe { object_observe_pointer.as_mut().unwrap() };
	object_observe.terminate();
}


#[wasm_bindgen]
pub fn hakuban_object_observe_contract_next(object_observe_pointer: *mut ObjectObserveContract) -> *mut WasmFutureReturningPointer {
	let object_observe: &mut ObjectObserveContract = unsafe { object_observe_pointer.as_mut().unwrap() };
	Box::into_raw(Box::new(WasmFutureReturningPointer::new(
		object_observe.next().map(|item| item.map(|object_state_stream| Box::into_raw(Box::new(object_state_stream)) as *mut u8).into()),
	)))
}


#[wasm_bindgen]
pub fn hakuban_object_observe_contract_ready(object_observe_pointer: *mut ObjectObserveContract) -> WasmResultWithPointer {
	let object_observe: &mut ObjectObserveContract = unsafe { object_observe_pointer.as_mut().unwrap() };
	if let Some(streams) = object_observe.ready() {
		WasmResultWithPointer::ok(Box::into_raw(Box::new(streams)))
	} else {
		WasmResultWithPointer::error(WasmResultStatus::NotAvailable)
	}
}