use serde::Serialize;
use wasm_bindgen::prelude::*;
fn to_js<T: Serialize>(value: &T) -> Result<JsValue, JsValue> {
let serializer = serde_wasm_bindgen::Serializer::new().serialize_maps_as_objects(true);
value
.serialize(&serializer)
.map_err(|error| JsError::new(&error.to_string()).into())
}
fn decode_error(error: crate::FreeformDecodeError) -> JsValue {
to_js(&error).unwrap_or_else(|serialization_error| serialization_error)
}
#[wasm_bindgen(js_name = decodePkDrawing)]
pub fn decode_pk_drawing(bytes: &[u8]) -> Result<JsValue, JsValue> {
let drawing = crate::decode_pk_drawing(bytes).map_err(decode_error)?;
to_js(&drawing)
}
#[wasm_bindgen(js_name = decodeCrlNative)]
pub fn decode_crl_native(
bytes: &[u8],
tsu_description: Option<Box<[u8]>>,
) -> Result<JsValue, JsValue> {
let native = crate::decode_crl_native(bytes).map_err(decode_error)?;
let native = match tsu_description {
Some(bytes) => {
let entries = crate::parse_tsu_description(&bytes).map_err(decode_error)?;
crate::join_crl_tsu(native, &entries).map_err(decode_error)?
},
None => native,
};
to_js(&native)
}
#[wasm_bindgen(js_name = parseTsuDescription)]
pub fn parse_tsu_description(bytes: &[u8]) -> Result<JsValue, JsValue> {
let entries = crate::parse_tsu_description(bytes).map_err(decode_error)?;
to_js(&entries)
}
#[wasm_bindgen(js_name = decodePasteboard)]
pub fn decode_pasteboard(blobs: JsValue) -> Result<JsValue, JsValue> {
let blobs = serde_wasm_bindgen::from_value(blobs)
.map_err(|error| decode_error(crate::FreeformDecodeError::invalid(error.to_string())))?;
to_js(&crate::decode_pasteboard(blobs))
}