hakuban 0.8.5

Data-object sharing library
Documentation
use std::{mem::MaybeUninit, sync::Arc};

#[derive(Debug, Eq, PartialEq)]
#[repr(u8)]
pub enum FFIResultStatus {
	Ok = 0,
	Pointer = 1,
	Pending = 2,
	EndOfStream = 3,
	InvalidString = 4,
	InvalidJSON = 5,
	InvalidURL = 6,
	InvalidLogLevel = 7,
	LoggerInitializationError = 8,
	ConnectionTerminated = 9,
}

#[derive(Debug)]
#[repr(C)]
pub struct FFIResult {
	pub status: FFIResultStatus,
	pub pointer: MaybeUninit<*mut u8>,
}

impl FFIResult {
	pub fn ok() -> FFIResult {
		FFIResult { status: FFIResultStatus::Ok, pointer: MaybeUninit::zeroed() }
	}

	pub fn pointer<T>(value: T) -> FFIResult {
		FFIResult { status: FFIResultStatus::Pointer, pointer: MaybeUninit::new(Box::into_raw(Box::new(value)) as *mut u8) }
	}

	pub fn arc_pointer<T>(value: Arc<T>) -> FFIResult {
		FFIResult { status: FFIResultStatus::Pointer, pointer: MaybeUninit::new(Arc::into_raw(value) as *mut u8) }
	}

	pub fn pending() -> FFIResult {
		FFIResult { status: FFIResultStatus::Pending, pointer: MaybeUninit::zeroed() }
	}

	pub fn end_of_stream() -> FFIResult {
		FFIResult { status: FFIResultStatus::EndOfStream, pointer: MaybeUninit::zeroed() }
	}

	pub fn error(status: FFIResultStatus) -> FFIResult {
		FFIResult { status, pointer: MaybeUninit::zeroed() }
	}
}