diff options
author | Luca Casonato <hello@lcas.dev> | 2021-08-25 13:48:53 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-25 13:48:53 +0200 |
commit | 5d814a4c244d489b4ae51002a0cf1d3c2fe16058 (patch) | |
tree | 3597ab7d4c438b96c34dac52f9f537989129001e /ext/web/message_port.rs | |
parent | f84cd9403db3545c8058a9c28474b3c99d4c2dd4 (diff) |
feat: ArrayBuffer in structured clone transfer (#11840)
Diffstat (limited to 'ext/web/message_port.rs')
-rw-r--r-- | ext/web/message_port.rs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/ext/web/message_port.rs b/ext/web/message_port.rs index 4af99d501..d8d8e5907 100644 --- a/ext/web/message_port.rs +++ b/ext/web/message_port.rs @@ -16,6 +16,7 @@ use tokio::sync::mpsc::UnboundedSender; enum Transferable { MessagePort(MessagePort), + ArrayBuffer(u32), } type MessagePortMessage = (Vec<u8>, Vec<Transferable>); @@ -127,6 +128,7 @@ pub fn op_message_port_create_entangled( pub enum JsTransferable { #[serde(rename_all = "camelCase")] MessagePort(ResourceId), + ArrayBuffer(u32), } fn deserialize_js_transferables( @@ -146,6 +148,9 @@ fn deserialize_js_transferables( .map_err(|_| type_error("Message port is not ready for transfer"))?; transferables.push(Transferable::MessagePort(resource.port)); } + JsTransferable::ArrayBuffer(id) => { + transferables.push(Transferable::ArrayBuffer(id)); + } } } Ok(transferables) @@ -165,6 +170,9 @@ fn serialize_transferables( }); js_transferables.push(JsTransferable::MessagePort(rid)); } + Transferable::ArrayBuffer(id) => { + js_transferables.push(JsTransferable::ArrayBuffer(id)); + } } } js_transferables @@ -182,11 +190,9 @@ pub fn op_message_port_post_message( data: JsMessageData, ) -> Result<(), AnyError> { for js_transferable in &data.transferables { - match js_transferable { - JsTransferable::MessagePort(id) => { - if *id == rid { - return Err(type_error("Can not transfer self message port")); - } + if let JsTransferable::MessagePort(id) = js_transferable { + if *id == rid { + return Err(type_error("Can not transfer self message port")); } } } |