Trait web_thread::web::message::MessageSend
source · pub trait MessageSend {
type Send: Send;
// Required methods
fn send<E: Extend<JsValue>>(
self,
transfer: &mut E,
) -> RawMessage<Self::Send>;
fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self;
}
Available on
Web
and crate feature message
only.Expand description
Allows a Serializable
and/or Transferable
value to be sent to
another threads. See spawn_with_message()
.
§Notes
- Sending a
JsValue::UNDEFINED
might be interpreted at the receiving end asNone
. - No values will be transferred if
RawMessage::serialize
isNone
.
§Example
use js_sys::{Array, ArrayBuffer};
use wasm_bindgen::{JsCast, JsValue};
use web_sys::{HtmlCanvasElement, OffscreenCanvas};
use web_thread::web::{self, JoinHandleExt};
use web_thread::web::message::{MessageSend, RawMessage};
struct Struct {
a: u8,
b: ArrayBuffer,
c: OffscreenCanvas,
}
impl MessageSend for Struct {
type Send = u8;
fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send> {
let serialize = Array::of2(&self.b, &self.c);
transfer.extend([self.c.into()]);
RawMessage {
send: Some(self.a),
serialize: Some(serialize.into()),
}
}
fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self {
let array: Array = serialized.unwrap().unchecked_into();
Self {
a: sent.unwrap(),
b: array.get(0).unchecked_into(),
c: array.get(1).unchecked_into(),
}
}
}
let canvas: HtmlCanvasElement = canvas;
let message = Struct {
a: 42,
b: ArrayBuffer::new(1000),
c: canvas.transfer_control_to_offscreen().unwrap(),
};
web::spawn_with_message(
|message| async move {
// Do work.
},
message,
)
.join_async()
.await
.unwrap();
Required Associated Types§
Required Methods§
sourcefn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>
fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>
Serialize into RawMessage
to send.
sourcefn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self
fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self
Deserialize from RawMessage::serialize
and RawMessage::send
.
Object Safety§
This trait is not object safe.
Implementations on Foreign Types§
source§impl<T1: MessageSend> MessageSend for (T1,)
impl<T1: MessageSend> MessageSend for (T1,)
source§impl<T1: MessageSend, T2: MessageSend> MessageSend for (T1, T2)
impl<T1: MessageSend, T2: MessageSend> MessageSend for (T1, T2)
source§impl<T1: MessageSend, T2: MessageSend, T3: MessageSend> MessageSend for (T1, T2, T3)
impl<T1: MessageSend, T2: MessageSend, T3: MessageSend> MessageSend for (T1, T2, T3)
§type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>)
type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>)
Available on crate feature
message
only.source§impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend> MessageSend for (T1, T2, T3, T4)
impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend> MessageSend for (T1, T2, T3, T4)
§type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>)
type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>)
Available on crate feature
message
only.source§impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend> MessageSend for (T1, T2, T3, T4, T5)
impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend> MessageSend for (T1, T2, T3, T4, T5)
§type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>)
type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>)
Available on crate feature
message
only.source§impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6)
impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6)
§type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>)
type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>)
Available on crate feature
message
only.source§impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend, T7: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6, T7)
impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend, T7: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6, T7)
§type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>, Option<<T7 as MessageSend>::Send>)
type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>, Option<<T7 as MessageSend>::Send>)
Available on crate feature
message
only.source§impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend, T7: MessageSend, T8: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6, T7, T8)
impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend, T7: MessageSend, T8: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6, T7, T8)
§type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>, Option<<T7 as MessageSend>::Send>, Option<<T8 as MessageSend>::Send>)
type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>, Option<<T7 as MessageSend>::Send>, Option<<T8 as MessageSend>::Send>)
Available on crate feature
message
only.source§impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend, T7: MessageSend, T8: MessageSend, T9: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6, T7, T8, T9)
impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend, T7: MessageSend, T8: MessageSend, T9: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6, T7, T8, T9)
§type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>, Option<<T7 as MessageSend>::Send>, Option<<T8 as MessageSend>::Send>, Option<<T9 as MessageSend>::Send>)
type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>, Option<<T7 as MessageSend>::Send>, Option<<T8 as MessageSend>::Send>, Option<<T9 as MessageSend>::Send>)
Available on crate feature
message
only.source§impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend, T7: MessageSend, T8: MessageSend, T9: MessageSend, T10: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend, T7: MessageSend, T8: MessageSend, T9: MessageSend, T10: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
§type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>, Option<<T7 as MessageSend>::Send>, Option<<T8 as MessageSend>::Send>, Option<<T9 as MessageSend>::Send>, Option<<T10 as MessageSend>::Send>)
type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>, Option<<T7 as MessageSend>::Send>, Option<<T8 as MessageSend>::Send>, Option<<T9 as MessageSend>::Send>, Option<<T10 as MessageSend>::Send>)
Available on crate feature
message
only.source§impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend, T7: MessageSend, T8: MessageSend, T9: MessageSend, T10: MessageSend, T11: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend, T7: MessageSend, T8: MessageSend, T9: MessageSend, T10: MessageSend, T11: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
§type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>, Option<<T7 as MessageSend>::Send>, Option<<T8 as MessageSend>::Send>, Option<<T9 as MessageSend>::Send>, Option<<T10 as MessageSend>::Send>, Option<<T11 as MessageSend>::Send>)
type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>, Option<<T7 as MessageSend>::Send>, Option<<T8 as MessageSend>::Send>, Option<<T9 as MessageSend>::Send>, Option<<T10 as MessageSend>::Send>, Option<<T11 as MessageSend>::Send>)
Available on crate feature
message
only.source§impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend, T7: MessageSend, T8: MessageSend, T9: MessageSend, T10: MessageSend, T11: MessageSend, T12: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)
impl<T1: MessageSend, T2: MessageSend, T3: MessageSend, T4: MessageSend, T5: MessageSend, T6: MessageSend, T7: MessageSend, T8: MessageSend, T9: MessageSend, T10: MessageSend, T11: MessageSend, T12: MessageSend> MessageSend for (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)
§type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>, Option<<T7 as MessageSend>::Send>, Option<<T8 as MessageSend>::Send>, Option<<T9 as MessageSend>::Send>, Option<<T10 as MessageSend>::Send>, Option<<T11 as MessageSend>::Send>, Option<<T12 as MessageSend>::Send>)
type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>, Option<<T3 as MessageSend>::Send>, Option<<T4 as MessageSend>::Send>, Option<<T5 as MessageSend>::Send>, Option<<T6 as MessageSend>::Send>, Option<<T7 as MessageSend>::Send>, Option<<T8 as MessageSend>::Send>, Option<<T9 as MessageSend>::Send>, Option<<T10 as MessageSend>::Send>, Option<<T11 as MessageSend>::Send>, Option<<T12 as MessageSend>::Send>)
Available on crate feature
message
only.