hakuban 0.7.2

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


use futures::{stream::StreamExt, FutureExt};

use super::{ffi_future::FFIFuture, FFIObjectDescriptor, FFIObjectState, FFIResult};
use crate::object::ObjectStateStream;

#[no_mangle]
pub extern "C" fn hakuban_object_state_stream_drop(object_state_stream_pointer: *mut ObjectStateStream) {
	drop(unsafe { Box::from_raw(object_state_stream_pointer) });
}


#[no_mangle]
pub extern "C" fn hakuban_object_state_stream_next(object_state_stream_pointer: *mut ObjectStateStream) -> *mut FFIFuture<*mut FFIObjectState> {
	let object_state_stream: &mut ObjectStateStream = unsafe { object_state_stream_pointer.as_mut().unwrap() };
	Box::into_raw(Box::new(FFIFuture::new(object_state_stream.next().map(|item| item.map(|state| Box::into_raw(Box::new(FFIObjectState::new(state)))).into()))))
}


#[no_mangle]
pub extern "C" fn hakuban_object_state_stream_current(object_state_stream_pointer: *mut ObjectStateStream) -> FFIResult<*mut FFIObjectState> {
	let object_state_stream: &mut ObjectStateStream = unsafe { object_state_stream_pointer.as_mut().unwrap() };
	if let Some(state) = object_state_stream.current() {
		FFIResult::ok(Box::into_raw(Box::new(FFIObjectState::new(state))))
	} else {
		FFIResult::error(super::FFIResultStatus::NotAvailable)
	}
}


#[no_mangle]
pub extern "C" fn hakuban_object_state_stream_descriptor(object_state_stream_pointer: *mut ObjectStateStream) -> *mut FFIObjectDescriptor {
	let object_state_stream: &mut ObjectStateStream = unsafe { object_state_stream_pointer.as_mut().unwrap() };
	Box::into_raw(Box::new(object_state_stream.descriptor().into()))
}