summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--serde_v8/de.rs6
-rw-r--r--serde_v8/tests/de.rs3
2 files changed, 6 insertions, 3 deletions
diff --git a/serde_v8/de.rs b/serde_v8/de.rs
index c09796d4b..7b99fdcaf 100644
--- a/serde_v8/de.rs
+++ b/serde_v8/de.rs
@@ -201,8 +201,8 @@ impl<'de, 'a, 'b, 's, 'x> de::Deserializer<'de>
where
V: Visitor<'de>,
{
- if self.input.is_string() {
- let v8_string = v8::Local::<v8::String>::try_from(self.input).unwrap();
+ if self.input.is_string() || self.input.is_string_object() {
+ let v8_string = self.input.to_string(self.scope).unwrap();
let string = to_utf8(v8_string, self.scope);
visitor.visit_string(string)
} else {
@@ -396,7 +396,7 @@ impl<'de, 'a, 'b, 's, 'x> de::Deserializer<'de>
V: Visitor<'de>,
{
// Unit variant
- if self.input.is_string() {
+ if self.input.is_string() || self.input.is_string_object() {
let payload = v8::undefined(self.scope).into();
visitor.visit_enum(EnumAccess {
scope: self.scope,
diff --git a/serde_v8/tests/de.rs b/serde_v8/tests/de.rs
index 1d4dae51a..5ae104036 100644
--- a/serde_v8/tests/de.rs
+++ b/serde_v8/tests/de.rs
@@ -125,8 +125,11 @@ detest!(
// Unit enums
detest!(de_enum_unit_a, EnumUnit, "'A'", EnumUnit::A);
+detest!(de_enum_unit_so_a, EnumUnit, "new String('A')", EnumUnit::A);
detest!(de_enum_unit_b, EnumUnit, "'B'", EnumUnit::B);
+detest!(de_enum_unit_so_b, EnumUnit, "new String('B')", EnumUnit::B);
detest!(de_enum_unit_c, EnumUnit, "'C'", EnumUnit::C);
+detest!(de_enum_unit_so_c, EnumUnit, "new String('C')", EnumUnit::C);
// Enums with payloads (tuples & struct)
detest!(