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

§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§

source

type Send: Send

Send type.

Required Methods§

source

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Serialize into RawMessage to send.

source

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<T1: MessageSend> MessageSend for (T1,)

§

type Send = (Option<<T1 as MessageSend>::Send>,)

Available on crate feature message only.
source§

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Available on crate feature message only.
source§

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

Available on crate feature message only.
source§

impl<T1: MessageSend, T2: MessageSend> MessageSend for (T1, T2)

§

type Send = (Option<<T1 as MessageSend>::Send>, Option<<T2 as MessageSend>::Send>)

Available on crate feature message only.
source§

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Available on crate feature message only.
source§

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

Available on crate feature message only.
source§

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>)

Available on crate feature message only.
source§

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Available on crate feature message only.
source§

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

Available on crate feature message only.
source§

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>)

Available on crate feature message only.
source§

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Available on crate feature message only.
source§

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

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)

§

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§

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Available on crate feature message only.
source§

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

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)

§

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§

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Available on crate feature message only.
source§

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

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)

§

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§

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Available on crate feature message only.
source§

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

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)

§

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§

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Available on crate feature message only.
source§

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

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)

§

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§

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Available on crate feature message only.
source§

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

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)

§

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§

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Available on crate feature message only.
source§

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

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)

§

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§

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Available on crate feature message only.
source§

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

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)

§

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.
source§

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Available on crate feature message only.
source§

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

Available on crate feature message only.
source§

impl<const SIZE: usize, T: MessageSend> MessageSend for [T; SIZE]

§

type Send = [Option<<T as MessageSend>::Send>; SIZE]

Available on crate feature message only.
source§

fn send<E: Extend<JsValue>>(self, transfer: &mut E) -> RawMessage<Self::Send>

Available on crate feature message only.
source§

fn receive(serialized: Option<JsValue>, sent: Option<Self::Send>) -> Self

Available on crate feature message only.

Implementors§