use crate::{cjseq_to_cj, CityJSON, CityJSONFeature};
use serde_wasm_bindgen::{from_value, to_value};
use wasm_bindgen::prelude::*;
#[wasm_bindgen(start)]
pub fn main() {
console_error_panic_hook::set_once();
}
#[wasm_bindgen(js_name = cjseqToCj)]
pub fn cjseq_to_cj_wasm(base_cj: JsValue, features: JsValue) -> Result<JsValue, JsValue> {
let base_cj: CityJSON = match from_value(base_cj) {
Ok(cj) => cj,
Err(e) => {
web_sys::console::error_1(&format!("failed to deserialize base_cj: {}", e).into());
return Err(JsValue::from_str(&format!(
"failed to parse base_cj: {}",
e
)));
}
};
let features: Vec<CityJSONFeature> = match from_value(features) {
Ok(f) => f,
Err(e) => {
web_sys::console::error_1(&format!("failed to deserialize features: {}", e).into());
return Err(JsValue::from_str(&format!(
"failed to parse features: {}",
e
)));
}
};
let cj = cjseq_to_cj(base_cj, features);
match to_value(&cj) {
Ok(js_val) => Ok(js_val),
Err(e) => {
web_sys::console::error_1(&format!("failed to serialize cj: {}", e).into());
Err(JsValue::from_str(&format!("failed to serialize cj: {}", e)))
}
}
}