hakuban 0.8.5

Data-object sharing library
Documentation
use std::fmt::Debug;

use wasm_bindgen::prelude::*;

#[derive(Debug, Clone, Copy)]
#[wasm_bindgen]
pub enum WasmResultStatus {
	Ok = 0,
	Pointer = 1,
	Pending = 2,
	EndOfStream = 3,
	InvalidString = 4,
	InvalidJSON = 5,
	InvalidURL = 6,
	InvalidLogLevel = 7,
	LoggerInitializationError = 8,
	ConnectionTerminated = 9,
}

#[derive(Debug)]
#[wasm_bindgen]
pub struct WasmResult {
	pub status: WasmResultStatus,
	pub pointer: Option<*mut u8>,
	#[wasm_bindgen(getter_with_clone)]
	pub error_message: Option<String>,
}

impl WasmResult {
	pub fn ok() -> WasmResult {
		WasmResult { status: WasmResultStatus::Ok, pointer: None, error_message: None }
	}

	pub fn pointer<T>(value: T) -> WasmResult {
		WasmResult { status: WasmResultStatus::Pointer, pointer: Some(Box::into_raw(Box::new(value)) as *mut u8), error_message: None }
	}

	pub fn pending() -> WasmResult {
		WasmResult { status: WasmResultStatus::Pending, pointer: None, error_message: None }
	}

	pub fn end_of_stream() -> WasmResult {
		WasmResult { status: WasmResultStatus::EndOfStream, pointer: None, error_message: None }
	}

	pub fn error<E: Debug>(status: WasmResultStatus, error_message: E) -> WasmResult {
		WasmResult { status, pointer: None, error_message: Some(format!("{:?}", error_message)) }
	}
}