use crate::{Trek, TrekOptions};
use serde::Serialize;
use serde_wasm_bindgen::from_value;
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub struct TrekWasm {
inner: Trek,
}
#[wasm_bindgen]
impl TrekWasm {
#[wasm_bindgen(constructor)]
pub fn new(options: JsValue) -> Result<TrekWasm, JsValue> {
console_error_panic_hook::set_once();
crate::utils::init_tracing();
let options: TrekOptions = from_value(options)?;
Ok(TrekWasm {
inner: Trek::new(options),
})
}
#[wasm_bindgen]
pub fn parse(&self, html: &str) -> Result<JsValue, JsValue> {
match self.inner.parse(html) {
Ok(response) => {
let serializer =
serde_wasm_bindgen::Serializer::new().serialize_maps_as_objects(true);
response
.serialize(&serializer)
.map_err(|e| JsValue::from_str(&e.to_string()))
}
Err(e) => Err(JsValue::from_str(&e.to_string())),
}
}
#[wasm_bindgen]
pub async fn parse_async(&self, html: &str) -> Result<JsValue, JsValue> {
self.parse(html)
}
}
#[wasm_bindgen(start)]
pub fn init() {
console_error_panic_hook::set_once();
crate::utils::init_tracing();
}