use js_sys::*;
use serde::{de::DeserializeOwned, Serialize};
use serde_wasm_bindgen::{from_value, to_value};
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
extern "C" {
#[wasm_bindgen(js_namespace = wx, js_name = setStorageSync)]
fn set_storage_sync(key: &str, value: JsValue);
#[wasm_bindgen(js_namespace = wx, js_name = removeStorageSync)]
fn remove_storage_sync(key: &str);
#[wasm_bindgen(js_namespace = wx, js_name = getStorageSync)]
fn get_storage_sync(key: &str) -> JsValue;
#[wasm_bindgen(js_namespace = wx, js_name = clearStorageSync)]
fn clear_storage_sync();
#[wasm_bindgen(js_namespace = wx, js_name = createBufferURL)]
fn create_buffer_url(buffer: ArrayBuffer) -> String;
#[wasm_bindgen(js_namespace = wx, js_name = revokeBufferURL)]
fn revoke_buffer_url(url: &str);
}
pub fn wx_set_storage_sync<T: AsRef<str>, D>(key: T, value: &D)
where
D: Serialize + DeserializeOwned,
{
set_storage_sync(key.as_ref(), to_value(value).unwrap());
}
pub fn wx_get_storage_sync<T: AsRef<str>, D>(key: T) -> D
where
D: Serialize + DeserializeOwned,
{
let value = get_storage_sync(key.as_ref());
from_value(value).unwrap()
}
pub fn wx_remove_storage_sync<T: AsRef<str>>(key: T) {
remove_storage_sync(key.as_ref());
}
pub fn wx_clear_storage_sync() {
clear_storage_sync();
}
pub fn wx_create_buffer_url(buf: &Vec<u8>) -> String {
let value = to_value(buf).unwrap();
let arr = Uint8Array::new(&value).buffer();
create_buffer_url(arr)
}
pub fn wx_revoke_buffer_url<T: AsRef<str>>(url: T) {
revoke_buffer_url(url.as_ref())
}