tsain-core 0.1.0

Chain TypeScript and Rust in fast and secure way
Documentation
//! Use to_value and from_value on Serde derived types
//! * Forked & Revised from serde-wasm-bindgen
//! * A `//~~` comment marks the original serde-wasm-bindgen implementation it replaces.
use super::*;
use wasm_bindgen::prelude::*;

mod de;
mod ser;

pub type Result<T = JsValue> = std::result::Result<T, Error>;

/// Converts a Rust value into a [`JsValue`].
pub fn to_value<T: ::serde::ser::Serialize + ?Sized>(value: &T) -> Result<JsValue> {
    value.serialize(&ser::Serializer::new())
}

/// Converts [`JsValue`] into a Rust type.
pub fn from_value<T: ::serde::de::DeserializeOwned>(value: JsValue) -> Result<T> {
    T::deserialize(de::Deserializer::from(value))
}

#[wasm_bindgen]
extern "C" {
    type ObjectExt;

    #[wasm_bindgen(method, indexing_getter)]
    fn get_with_ref_key(this: &ObjectExt, key: &JsString) -> JsValue;

    #[wasm_bindgen(method, indexing_setter)]
    fn set(this: &ObjectExt, key: JsString, value: JsValue);
}

pub mod preserve {
    //! Only the magic constant remains from serde-wasm-bindgen's `preserve` module;
    //! the `serialize_with`/`deserialize_with` helpers were dropped in this fork.

    // Some arbitrary string that no one will collide with unless they try.
    pub(crate) const PRESERVED_VALUE_MAGIC: &str = "1fc430ca-5b7f-4295-92de-33cf2b145d38";
}

use js_sys::JsString;