summaryrefslogtreecommitdiff
path: root/serde_v8
diff options
context:
space:
mode:
Diffstat (limited to 'serde_v8')
-rw-r--r--serde_v8/de.rs8
-rw-r--r--serde_v8/tests/de.rs23
2 files changed, 29 insertions, 2 deletions
diff --git a/serde_v8/de.rs b/serde_v8/de.rs
index 79fb9ae6d..dff29b8f9 100644
--- a/serde_v8/de.rs
+++ b/serde_v8/de.rs
@@ -325,8 +325,12 @@ impl<'de, 'a, 'b, 's, 'x> de::Deserializer<'de>
};
visitor.visit_map(map)
} else {
- let prop_names =
- obj.get_own_property_names(self.scope, Default::default());
+ let prop_names = obj.get_own_property_names(
+ self.scope,
+ v8::GetPropertyNamesArgsBuilder::new()
+ .key_conversion(v8::KeyConversionMode::ConvertToString)
+ .build(),
+ );
let keys: Vec<magic::Value> = match prop_names {
Some(names) => from_v8(self.scope, names.into()).unwrap(),
None => vec![],
diff --git a/serde_v8/tests/de.rs b/serde_v8/tests/de.rs
index 7affe5f8e..c67b4012c 100644
--- a/serde_v8/tests/de.rs
+++ b/serde_v8/tests/de.rs
@@ -185,6 +185,29 @@ fn de_map() {
}
#[test]
+fn de_obj_with_numeric_keys() {
+ dedo(
+ r#"({
+ lines: {
+ 100: {
+ unit: "m"
+ },
+ 200: {
+ unit: "cm"
+ }
+ }
+})"#,
+ |scope, v| {
+ let json: serde_json::Value = serde_v8::from_v8(scope, v).unwrap();
+ assert_eq!(
+ json.to_string(),
+ r#"{"lines":{"100":{"unit":"m"},"200":{"unit":"cm"}}}"#
+ );
+ },
+ )
+}
+
+#[test]
fn de_string_or_buffer() {
dedo("'hello'", |scope, v| {
let sob: serde_v8::StringOrBuffer = serde_v8::from_v8(scope, v).unwrap();