mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-04-11 22:56:06 +00:00
Add initial support and tests for JSON
This commit is contained in:
parent
9a1147d61b
commit
23cb0ea656
@ -2663,6 +2663,31 @@ extern "C" {
|
|||||||
pub fn validate(bufferSource: &JsValue) -> Result<bool, JsValue>;
|
pub fn validate(bufferSource: &JsValue) -> Result<bool, JsValue>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// JSON
|
||||||
|
#[wasm_bindgen]
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub type JSON;
|
||||||
|
|
||||||
|
/// The `JSON.parse()` method parses a JSON string, constructing the
|
||||||
|
/// JavaScript value or object described by the string.
|
||||||
|
///
|
||||||
|
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
|
||||||
|
#[wasm_bindgen(catch, static_method_of = JSON)]
|
||||||
|
pub fn parse(text: &str) -> Result<JsValue, JsValue>;
|
||||||
|
|
||||||
|
/// The JSON.stringify() method converts a JavaScript value to a JSON string,
|
||||||
|
/// optionally replacing values if a replacer function is specified or
|
||||||
|
/// optionally including only the specified properties if a replacer array is
|
||||||
|
/// specified.
|
||||||
|
///
|
||||||
|
/// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
|
||||||
|
#[wasm_bindgen(static_method_of = JSON)]
|
||||||
|
pub fn stringify(obj: &JsValue) -> JsString;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// JsString
|
// JsString
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
69
crates/js-sys/tests/wasm/JSON.rs
Normal file
69
crates/js-sys/tests/wasm/JSON.rs
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
use wasm_bindgen::JsValue;
|
||||||
|
use wasm_bindgen_test::*;
|
||||||
|
use wasm_bindgen::JsCast;
|
||||||
|
use js_sys::*;
|
||||||
|
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn parse_array() {
|
||||||
|
|
||||||
|
let js_array = JSON::parse("[1, 2, 3]").unwrap();;
|
||||||
|
assert!(Array::is_array(&js_array));
|
||||||
|
|
||||||
|
let array = Array::from(&js_array);
|
||||||
|
assert_eq!(array.length(), 3);
|
||||||
|
assert_eq!(array.pop(), 3);
|
||||||
|
assert_eq!(array.pop(), 2);
|
||||||
|
assert_eq!(array.pop(), 1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn parse_object() {
|
||||||
|
|
||||||
|
let js_object = JSON::parse("{\"x\": 5, \"y\": true, \"z\": [\"foo\", \"bar\"]}").unwrap();
|
||||||
|
assert!(js_object.is_object());
|
||||||
|
|
||||||
|
let obj = Object::from(js_object);
|
||||||
|
let keys = Object::keys(&obj);
|
||||||
|
assert_eq!(keys.length(), 3);
|
||||||
|
assert_eq!(keys.pop().as_string().unwrap(), "z");
|
||||||
|
assert_eq!(keys.pop().as_string().unwrap(), "y");
|
||||||
|
assert_eq!(keys.pop().as_string().unwrap(), "x");
|
||||||
|
|
||||||
|
let values = Object::values(&obj);
|
||||||
|
assert_eq!(values.length(), 3);
|
||||||
|
|
||||||
|
let z = values.pop();
|
||||||
|
assert!(Array::is_array(&z));
|
||||||
|
let z_array = Array::from(&z);
|
||||||
|
assert_eq!(z_array.length(), 2);
|
||||||
|
|
||||||
|
let y = values.pop();
|
||||||
|
assert_eq!(y.as_bool(), Some(true));
|
||||||
|
|
||||||
|
let x = values.pop();
|
||||||
|
assert!(Number::is_integer(&x));
|
||||||
|
let x_num = Number::new(&x);
|
||||||
|
assert_eq!(x_num.value_of(), 5.0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn parse_error() {
|
||||||
|
let js_object = JSON::parse("invalid json");
|
||||||
|
assert!(js_object.is_err());
|
||||||
|
let err = js_object.unwrap_err();
|
||||||
|
assert!(err.is_instance_of::<Error>());
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen_test]
|
||||||
|
fn stringify() {
|
||||||
|
let arr = Array::new();
|
||||||
|
arr.push(&JsValue::from(1));
|
||||||
|
arr.push(&JsValue::from(true));
|
||||||
|
arr.push(&JsValue::from("hello"));
|
||||||
|
|
||||||
|
let str = JSON::stringify(&JsValue::from(arr));
|
||||||
|
let rust_str: String = From::from(str);
|
||||||
|
assert_eq!(rust_str, "[1,true,\"hello\"]");
|
||||||
|
}
|
@ -18,6 +18,7 @@ pub mod Function;
|
|||||||
pub mod Generator;
|
pub mod Generator;
|
||||||
pub mod Intl;
|
pub mod Intl;
|
||||||
pub mod JsString;
|
pub mod JsString;
|
||||||
|
pub mod JSON;
|
||||||
pub mod Map;
|
pub mod Map;
|
||||||
pub mod MapIterator;
|
pub mod MapIterator;
|
||||||
pub mod Math;
|
pub mod Math;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user