diff options
Diffstat (limited to 'serde_v8/src/de.rs')
-rw-r--r-- | serde_v8/src/de.rs | 10 |
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))) + } } } |