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 4de2f5817..f351d7870 100644
--- a/serde_v8/src/de.rs
+++ b/serde_v8/src/de.rs
@@ -309,6 +309,16 @@ impl<'de, 'a, 'b, 's, 'x> de::Deserializer<'de>
return visitor.visit_u64(hack);
}
+ // Magic Buffer
+ if name == magic::buffer::BUF_NAME {
+ let zero_copy_buf =
+ v8::Local::<v8::ArrayBufferView>::try_from(self.input)
+ .map(|view| magic::zero_copy_buf::ZeroCopyBuf::new(self.scope, view))
+ .map_err(|_| Error::ExpectedArray)?;
+ let data: [u8; 32] = unsafe { std::mem::transmute(zero_copy_buf) };
+ return visitor.visit_bytes(&data);
+ }
+
// Regular struct
let obj = v8::Local::<v8::Object>::try_from(self.input).unwrap();
let map = ObjectAccess {