refactor(vm, frontend): turns out that the serde_wasm_bindgen facilities of TSify are borken...

This commit is contained in:
Rachel Powers
2024-06-01 04:22:58 -07:00
parent d618f7b091
commit 6c26a37ca0
22 changed files with 1236 additions and 1338 deletions

View File

@@ -108,6 +108,23 @@ impl IntoIterator for CompileErrors {
}
}
use color_eyre::eyre;
pub fn parse_value<'a, T: serde::Deserialize<'a>>(
jd: impl serde::Deserializer<'a>,
) -> Result<T, color_eyre::Report> {
let mut track = serde_path_to_error::Track::new();
let path = serde_path_to_error::Deserializer::new(jd, &mut track);
let mut fun = |path: serde_ignored::Path| {
log!("Found ignored key: {path}");
};
serde_ignored::deserialize(path, &mut fun).map_err(|e| {
eyre::eyre!(
"path: {track} | error = {e}",
track = track.path().to_string(),
)
})
}
#[wasm_bindgen]
impl VMRef {
#[wasm_bindgen(constructor)]
@@ -120,6 +137,18 @@ impl VMRef {
self.vm.import_template_database(db);
}
#[wasm_bindgen(js_name = "importTemplateDatabaseSerde")]
pub fn import_template_database_serde(&self, db: JsValue) -> Result<(), JsError> {
let parsed_db: BTreeMap<i32, ObjectTemplate> =
parse_value(serde_wasm_bindgen::Deserializer::from(db)).map_err(|err| {
<&dyn std::error::Error as std::convert::Into<JsError>>::into(
std::convert::AsRef::<dyn std::error::Error>::as_ref(&err),
)
})?;
self.vm.import_template_database(parsed_db);
Ok(())
}
#[wasm_bindgen(js_name = "getTemplateDatabase")]
pub fn get_template_database(&self) -> TemplateDatabase {
TemplateDatabase(self.vm.get_template_database())