use wasm_bindgen::prelude::*;
use crate::link;
fn to_js(l: &link::ManifestLink) -> JsValue {
let out = js_sys::Object::new();
let _ = js_sys::Reflect::set(&out, &"uri".into(), &l.uri.as_str().into());
let _ = js_sys::Reflect::set(
&out,
&"jumbf".into(),
&match &l.jumbf {
Some(j) => j.as_str().into(),
None => JsValue::NULL,
},
);
let _ = js_sys::Reflect::set(&out, &"isEmbedded".into(), &l.is_embedded().into());
out.into()
}
#[wasm_bindgen]
pub fn format(uri: &str) -> Result<String, JsError> {
link::format(uri).map_err(|e| JsError::new(&e.to_string()))
}
#[wasm_bindgen(js_name = formatStrict)]
pub fn format_strict(uri: &str) -> Result<String, JsError> {
link::format_strict(uri).map_err(|e| JsError::new(&e.to_string()))
}
#[wasm_bindgen(js_name = encodeTarget)]
pub fn encode_target(uri: &str) -> String {
link::encode_target(uri)
}
#[wasm_bindgen]
pub fn extract(values: Vec<String>) -> Result<JsValue, JsError> {
match link::extract(values.iter().map(String::as_str)) {
Ok(found) => Ok(to_js(&found)),
Err(crate::Error::NotFound) => Ok(JsValue::NULL),
Err(e) => Err(JsError::new(&e.to_string())),
}
}
#[wasm_bindgen(js_name = locateAll)]
pub fn locate_all(values: Vec<String>) -> Vec<JsValue> {
link::locate_all(values.iter().map(String::as_str))
.iter()
.map(to_js)
.collect()
}
#[wasm_bindgen]
pub fn rel() -> String {
link::REL.to_string()
}