co-js 0.1.0

COKIT primitives for the browser using WebAssembly.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// SPDX-License-Identifier: AGPL-3.0-only
// Copyright (C) 2026 1io BRANDGUARDIAN GmbH

use serde_wasm_bindgen::Serializer;
use std::any::type_name;
use wasm_bindgen::prelude::*;

pub fn from_js_value<T: serde::de::DeserializeOwned>(value: JsValue) -> Result<T, JsValue> {
	Ok(serde_wasm_bindgen::from_value(value)
		.map_err(|err| format!("convert from `JsValue` to `{}` failed: {}", type_name::<T>(), err))?)
}

pub fn to_js_value<T: serde::Serialize>(value: &T) -> Result<JsValue, JsValue> {
	let serializer = Serializer::new().serialize_maps_as_objects(true);
	Ok(value
		.serialize(&serializer)
		.map_err(|err| format!("convert from `{}` to `JsValue` failed: {}", type_name::<T>(), err))?)
}