summaryrefslogtreecommitdiff
path: root/serde_v8/src/de.rs
diff options
context:
space:
mode:
Diffstat (limited to 'serde_v8/src/de.rs')
-rw-r--r--serde_v8/src/de.rs10
1 files changed, 10 insertions, 0 deletions
diff --git a/serde_v8/src/de.rs b/serde_v8/src/de.rs
index 3668a4fd5..d4338a37f 100644
--- a/serde_v8/src/de.rs
+++ b/serde_v8/src/de.rs
@@ -132,6 +132,16 @@ impl<'de, 'a, 'b, 's, 'x> de::Deserializer<'de>
ValueType::String => self.deserialize_string(visitor),
ValueType::Array => self.deserialize_seq(visitor),
ValueType::Object => self.deserialize_map(visitor),
+ // Map to Vec<u8> when deserialized via deserialize_any
+ // e.g: for untagged enums or StringOrBuffer
+ ValueType::ArrayBufferView => {
+ v8::Local::<v8::ArrayBufferView>::try_from(self.input)
+ .and_then(|view| {
+ magic::zero_copy_buf::ZeroCopyBuf::try_new(self.scope, view)
+ })
+ .map_err(|_| Error::ExpectedInteger)
+ .and_then(|zb| visitor.visit_byte_buf(Vec::from(&*zb)))
+ }
}
}