Closure

Struct Closure 

Source
pub struct Closure<T>
where T: ?Sized,
{ /* private fields */ }
Expand description

Closure type for passing Rust closures to JavaScript.

Implementations§

Source§

impl<T> Closure<T>
where T: ?Sized,

Source

pub fn new<M, F>(f: F) -> Closure<T>
where F: IntoClosure<M, Closure<T>>,

Source

pub fn once<F, M>(fn_once: F) -> Closure<T>
where F: WasmClosureFnOnce<T, M>,

Create a Closure from a function that can only be called once.

Since we have no way of enforcing that JS cannot attempt to call this FnOnce more than once, this produces a Closure<dyn FnMut(A...) -> R> that will panic if called more than once.

Source

pub fn forget(self)

Forgets the closure, leaking it.

Source§

impl<T> Closure<T>
where T: ?Sized,

Source

pub fn wrap<M>(data: Box<T>) -> Closure<T>
where T: WasmClosure<M>,

Wrap a boxed closure to create a Closure.

This is the classic wasm-bindgen API for creating closures from boxed trait objects.

Source

pub fn into_js_value(self) -> JsValue

Converts the Closure into a JsValue.

Source

pub fn once_into_js<F, M>(fn_once: F) -> JsValue
where F: WasmClosureFnOnce<T, M>,

Create a Closure from a function that can only be called once, and return the underlying JsValue directly.

This is a convenience method that combines once and into_js_value.

Trait Implementations§

Source§

impl<T> AsRef<JsValue> for Closure<T>
where T: ?Sized,

Source§

fn as_ref(&self) -> &JsValue

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<F> BatchableResult for Closure<F>
where F: ?Sized,

Source§

fn try_placeholder(batch: &mut Runtime) -> Option<Closure<F>>

Returns Some(placeholder) for opaque types that can be batched, None for types that require flushing to get the actual value. Read more
Source§

impl<F> BinaryDecode for Closure<F>
where F: ?Sized,

Source§

fn decode(decoder: &mut DecodedData<'_>) -> Result<Closure<F>, DecodeError>

Source§

impl<F> BinaryEncode for &Closure<F>
where F: ?Sized,

Source§

fn encode(self, encoder: &mut EncodedData)

Source§

impl<F> BinaryEncode for Closure<F>
where F: ?Sized,

Source§

fn encode(self, encoder: &mut EncodedData)

Source§

impl<T> Debug for Closure<T>
where T: ?Sized,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl<T> EncodeTypeDef for Closure<T>
where T: ?Sized,

Source§

fn encode_type_def(buf: &mut Vec<u8>)

Encode this type’s definition into the buffer. For primitives, this is just the TypeTag byte. For callbacks, this includes param count, param types, and return type.

Auto Trait Implementations§

§

impl<T> Freeze for Closure<T>
where T: ?Sized,

§

impl<T> RefUnwindSafe for Closure<T>
where T: RefUnwindSafe + ?Sized,

§

impl<T> Send for Closure<T>
where T: Send + ?Sized,

§

impl<T> Sync for Closure<T>
where T: Sync + ?Sized,

§

impl<T> Unpin for Closure<T>
where T: ?Sized,

§

impl<T> UnwindSafe for Closure<T>
where T: UnwindSafe + ?Sized,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<R, F, A1> IntoClosure<(BorrowedFirstArg, fn(&A1) -> R), Closure<dyn Fn(&A1) -> R>> for F
where F: Fn(&A1) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(&A1) -> R>

Source§

impl<R, F, A1> IntoClosure<(BorrowedFirstArg, fn(&A1) -> R), Closure<dyn FnMut(&A1) -> R>> for F
where F: FnMut(&A1) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(&A1) -> R>

Source§

impl<R, F, A1, A2> IntoClosure<(BorrowedFirstArg, fn(&A1, A2) -> R), Closure<dyn Fn(&A1, A2) -> R>> for F
where F: Fn(&A1, A2) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(&A1, A2) -> R>

Source§

impl<R, F, A1, A2> IntoClosure<(BorrowedFirstArg, fn(&A1, A2) -> R), Closure<dyn FnMut(&A1, A2) -> R>> for F
where F: FnMut(&A1, A2) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(&A1, A2) -> R>

Source§

impl<R, F, A1, A2, A3> IntoClosure<(BorrowedFirstArg, fn(&A1, A2, A3) -> R), Closure<dyn Fn(&A1, A2, A3) -> R>> for F
where F: Fn(&A1, A2, A3) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(&A1, A2, A3) -> R>

Source§

impl<R, F, A1, A2, A3> IntoClosure<(BorrowedFirstArg, fn(&A1, A2, A3) -> R), Closure<dyn FnMut(&A1, A2, A3) -> R>> for F
where F: FnMut(&A1, A2, A3) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(&A1, A2, A3) -> R>

Source§

impl<R, F, A1, A2, A3, A4> IntoClosure<(BorrowedFirstArg, fn(&A1, A2, A3, A4) -> R), Closure<dyn Fn(&A1, A2, A3, A4) -> R>> for F
where F: Fn(&A1, A2, A3, A4) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(&A1, A2, A3, A4) -> R>

Source§

impl<R, F, A1, A2, A3, A4> IntoClosure<(BorrowedFirstArg, fn(&A1, A2, A3, A4) -> R), Closure<dyn FnMut(&A1, A2, A3, A4) -> R>> for F
where F: FnMut(&A1, A2, A3, A4) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(&A1, A2, A3, A4) -> R>

Source§

impl<R, F, A1, A2, A3, A4, A5> IntoClosure<(BorrowedFirstArg, fn(&A1, A2, A3, A4, A5) -> R), Closure<dyn Fn(&A1, A2, A3, A4, A5) -> R>> for F
where F: Fn(&A1, A2, A3, A4, A5) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, A5: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(&A1, A2, A3, A4, A5) -> R>

Source§

impl<R, F, A1, A2, A3, A4, A5> IntoClosure<(BorrowedFirstArg, fn(&A1, A2, A3, A4, A5) -> R), Closure<dyn FnMut(&A1, A2, A3, A4, A5) -> R>> for F
where F: FnMut(&A1, A2, A3, A4, A5) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, A5: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(&A1, A2, A3, A4, A5) -> R>

Source§

impl<R, F, A1, A2, A3, A4, A5, A6> IntoClosure<(BorrowedFirstArg, fn(&A1, A2, A3, A4, A5, A6) -> R), Closure<dyn Fn(&A1, A2, A3, A4, A5, A6) -> R>> for F
where F: Fn(&A1, A2, A3, A4, A5, A6) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, A5: BinaryDecode + EncodeTypeDef + 'static, A6: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(&A1, A2, A3, A4, A5, A6) -> R>

Source§

impl<R, F, A1, A2, A3, A4, A5, A6> IntoClosure<(BorrowedFirstArg, fn(&A1, A2, A3, A4, A5, A6) -> R), Closure<dyn FnMut(&A1, A2, A3, A4, A5, A6) -> R>> for F
where F: FnMut(&A1, A2, A3, A4, A5, A6) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, A5: BinaryDecode + EncodeTypeDef + 'static, A6: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(&A1, A2, A3, A4, A5, A6) -> R>

Source§

impl<R, F, A1, A2, A3, A4, A5, A6, A7> IntoClosure<(BorrowedFirstArg, fn(&A1, A2, A3, A4, A5, A6, A7) -> R), Closure<dyn Fn(&A1, A2, A3, A4, A5, A6, A7) -> R>> for F
where F: Fn(&A1, A2, A3, A4, A5, A6, A7) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, A5: BinaryDecode + EncodeTypeDef + 'static, A6: BinaryDecode + EncodeTypeDef + 'static, A7: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(&A1, A2, A3, A4, A5, A6, A7) -> R>

Source§

impl<R, F, A1, A2, A3, A4, A5, A6, A7> IntoClosure<(BorrowedFirstArg, fn(&A1, A2, A3, A4, A5, A6, A7) -> R), Closure<dyn FnMut(&A1, A2, A3, A4, A5, A6, A7) -> R>> for F
where F: FnMut(&A1, A2, A3, A4, A5, A6, A7) -> R + 'static, A1: RefFromBinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, A5: BinaryDecode + EncodeTypeDef + 'static, A6: BinaryDecode + EncodeTypeDef + 'static, A7: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(&A1, A2, A3, A4, A5, A6, A7) -> R>

Source§

impl<R, F> IntoClosure<fn() -> R, Closure<dyn Fn() -> R>> for F
where F: Fn() -> R + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn() -> R>

Source§

impl<R, F> IntoClosure<fn() -> R, Closure<dyn FnMut() -> R>> for F
where F: FnMut() -> R + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut() -> R>

Source§

impl<R, F, A1> IntoClosure<fn(A1) -> R, Closure<dyn Fn(A1) -> R>> for F
where F: Fn(A1) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(A1) -> R>

Source§

impl<R, F, A1> IntoClosure<fn(A1) -> R, Closure<dyn FnMut(A1) -> R>> for F
where F: FnMut(A1) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(A1) -> R>

Source§

impl<R, F, A1, A2> IntoClosure<fn(A1, A2) -> R, Closure<dyn Fn(A1, A2) -> R>> for F
where F: Fn(A1, A2) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(A1, A2) -> R>

Source§

impl<R, F, A1, A2> IntoClosure<fn(A1, A2) -> R, Closure<dyn FnMut(A1, A2) -> R>> for F
where F: FnMut(A1, A2) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(A1, A2) -> R>

Source§

impl<R, F, A1, A2, A3> IntoClosure<fn(A1, A2, A3) -> R, Closure<dyn Fn(A1, A2, A3) -> R>> for F
where F: Fn(A1, A2, A3) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(A1, A2, A3) -> R>

Source§

impl<R, F, A1, A2, A3> IntoClosure<fn(A1, A2, A3) -> R, Closure<dyn FnMut(A1, A2, A3) -> R>> for F
where F: FnMut(A1, A2, A3) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(A1, A2, A3) -> R>

Source§

impl<R, F, A1, A2, A3, A4> IntoClosure<fn(A1, A2, A3, A4) -> R, Closure<dyn Fn(A1, A2, A3, A4) -> R>> for F
where F: Fn(A1, A2, A3, A4) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(A1, A2, A3, A4) -> R>

Source§

impl<R, F, A1, A2, A3, A4> IntoClosure<fn(A1, A2, A3, A4) -> R, Closure<dyn FnMut(A1, A2, A3, A4) -> R>> for F
where F: FnMut(A1, A2, A3, A4) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(A1, A2, A3, A4) -> R>

Source§

impl<R, F, A1, A2, A3, A4, A5> IntoClosure<fn(A1, A2, A3, A4, A5) -> R, Closure<dyn Fn(A1, A2, A3, A4, A5) -> R>> for F
where F: Fn(A1, A2, A3, A4, A5) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, A5: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(A1, A2, A3, A4, A5) -> R>

Source§

impl<R, F, A1, A2, A3, A4, A5> IntoClosure<fn(A1, A2, A3, A4, A5) -> R, Closure<dyn FnMut(A1, A2, A3, A4, A5) -> R>> for F
where F: FnMut(A1, A2, A3, A4, A5) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, A5: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(A1, A2, A3, A4, A5) -> R>

Source§

impl<R, F, A1, A2, A3, A4, A5, A6> IntoClosure<fn(A1, A2, A3, A4, A5, A6) -> R, Closure<dyn Fn(A1, A2, A3, A4, A5, A6) -> R>> for F
where F: Fn(A1, A2, A3, A4, A5, A6) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, A5: BinaryDecode + EncodeTypeDef + 'static, A6: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(A1, A2, A3, A4, A5, A6) -> R>

Source§

impl<R, F, A1, A2, A3, A4, A5, A6> IntoClosure<fn(A1, A2, A3, A4, A5, A6) -> R, Closure<dyn FnMut(A1, A2, A3, A4, A5, A6) -> R>> for F
where F: FnMut(A1, A2, A3, A4, A5, A6) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, A5: BinaryDecode + EncodeTypeDef + 'static, A6: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(A1, A2, A3, A4, A5, A6) -> R>

Source§

impl<R, F, A1, A2, A3, A4, A5, A6, A7> IntoClosure<fn(A1, A2, A3, A4, A5, A6, A7) -> R, Closure<dyn Fn(A1, A2, A3, A4, A5, A6, A7) -> R>> for F
where F: Fn(A1, A2, A3, A4, A5, A6, A7) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, A5: BinaryDecode + EncodeTypeDef + 'static, A6: BinaryDecode + EncodeTypeDef + 'static, A7: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn Fn(A1, A2, A3, A4, A5, A6, A7) -> R>

Source§

impl<R, F, A1, A2, A3, A4, A5, A6, A7> IntoClosure<fn(A1, A2, A3, A4, A5, A6, A7) -> R, Closure<dyn FnMut(A1, A2, A3, A4, A5, A6, A7) -> R>> for F
where F: FnMut(A1, A2, A3, A4, A5, A6, A7) -> R + 'static, A1: BinaryDecode + EncodeTypeDef + 'static, A2: BinaryDecode + EncodeTypeDef + 'static, A3: BinaryDecode + EncodeTypeDef + 'static, A4: BinaryDecode + EncodeTypeDef + 'static, A5: BinaryDecode + EncodeTypeDef + 'static, A6: BinaryDecode + EncodeTypeDef + 'static, A7: BinaryDecode + EncodeTypeDef + 'static, R: BinaryEncode + EncodeTypeDef + 'static,

Source§

fn into_closure(self) -> Closure<dyn FnMut(A1, A2, A3, A4, A5, A6, A7) -> R>

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.