use js_sys::{Array, JsString, Object};
use wasm_bindgen::prelude::*;
use crate::prelude::*;
#[wasm_bindgen]
extern "C" {
type RawMemory;
#[wasm_bindgen(static_method_of = RawMemory, getter = segments)]
fn segments() -> Object;
#[wasm_bindgen(static_method_of = RawMemory, getter = foreignSegment)]
fn foreign_segment() -> Option<ForeignSegment>;
#[wasm_bindgen(static_method_of = RawMemory)]
fn get() -> JsString;
#[wasm_bindgen(static_method_of = RawMemory)]
fn set(val: &JsString);
#[wasm_bindgen(static_method_of = RawMemory, js_name = setActiveSegments)]
fn set_active_segments(segment_ids: &Array);
#[wasm_bindgen(static_method_of = RawMemory, js_name = setActiveForeignSegment)]
fn set_active_foreign_segment(username: &JsString, segment_id: Option<u8>);
#[wasm_bindgen(static_method_of = RawMemory, js_name = setDefaultPublicSegment)]
fn set_default_public_segment(segment_id: JsValue);
#[wasm_bindgen(static_method_of = RawMemory, js_name = setPublicSegments)]
fn set_public_segments(segment_ids: &Array);
}
pub fn segments() -> JsHashMap<u8, String> {
RawMemory::segments().into()
}
pub fn segments_jsstring() -> JsHashMap<u8, JsString> {
RawMemory::segments().into()
}
pub fn foreign_segment() -> Option<ForeignSegment> {
RawMemory::foreign_segment()
}
pub fn get() -> JsString {
RawMemory::get()
}
pub fn set(val: &JsString) {
RawMemory::set(val)
}
pub fn set_active_segments(segment_ids: &[u8]) {
let segment_ids: Array = segment_ids
.iter()
.map(|s| *s as f64)
.map(JsValue::from_f64)
.collect();
RawMemory::set_active_segments(&segment_ids)
}
pub fn set_active_foreign_segment(username: &JsString, segment_id: Option<u8>) {
RawMemory::set_active_foreign_segment(username, segment_id)
}
pub fn set_default_public_segment(segment_id: Option<u8>) {
RawMemory::set_default_public_segment(
segment_id
.map(|f| JsValue::from_f64(f as f64))
.unwrap_or(JsValue::NULL),
)
}
pub fn set_public_segments(segment_ids: &[u8]) {
let segment_ids: Array = segment_ids
.iter()
.map(|s| *s as f64)
.map(JsValue::from_f64)
.collect();
RawMemory::set_public_segments(&segment_ids)
}
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen]
pub type ForeignSegment;
#[wasm_bindgen(method, getter)]
pub fn username(this: &ForeignSegment) -> JsString;
#[wasm_bindgen(method, getter)]
pub fn id(this: &ForeignSegment) -> u8;
#[wasm_bindgen(method, getter)]
pub fn data(this: &ForeignSegment) -> JsString;
}