Skip to main content

tsain_core/serial/
mod.rs

1//! Use to_value and from_value on Serde derived types
2//! * Forked & Revised from serde-wasm-bindgen
3//! * A `//~~` comment marks the original serde-wasm-bindgen implementation it replaces.
4use super::*;
5use wasm_bindgen::prelude::*;
6
7mod de;
8mod ser;
9
10pub type Result<T = JsValue> = std::result::Result<T, Error>;
11
12/// Converts a Rust value into a [`JsValue`].
13pub fn to_value<T: ::serde::ser::Serialize + ?Sized>(value: &T) -> Result<JsValue> {
14    value.serialize(&ser::Serializer::new())
15}
16
17/// Converts [`JsValue`] into a Rust type.
18pub fn from_value<T: ::serde::de::DeserializeOwned>(value: JsValue) -> Result<T> {
19    T::deserialize(de::Deserializer::from(value))
20}
21
22#[wasm_bindgen]
23extern "C" {
24    type ObjectExt;
25
26    #[wasm_bindgen(method, indexing_getter)]
27    fn get_with_ref_key(this: &ObjectExt, key: &JsString) -> JsValue;
28
29    #[wasm_bindgen(method, indexing_setter)]
30    fn set(this: &ObjectExt, key: JsString, value: JsValue);
31}
32
33pub mod preserve {
34    //! Only the magic constant remains from serde-wasm-bindgen's `preserve` module;
35    //! the `serialize_with`/`deserialize_with` helpers were dropped in this fork.
36
37    // Some arbitrary string that no one will collide with unless they try.
38    pub(crate) const PRESERVED_VALUE_MAGIC: &str = "1fc430ca-5b7f-4295-92de-33cf2b145d38";
39}
40
41use js_sys::JsString;