MetaCallFuture

Struct MetaCallFuture 

Source
pub struct MetaCallFuture { /* private fields */ }
Expand description

Represents MetaCallFuture. Keep in mind that it’s not supported to pass a future as an argument.

§Usage example:

Javascript Code:

function doubleValueAfterTime(value, delay) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            if (typeof value === 'number') {
                resolve(value * 2); // Resolves if the value is a number
            } else {
                reject('Error: The provided value is not a number.'); // Rejects if the value is not a number
            }
        }, delay);
    });
}

Calling Example:

use metacall::{MetaCallValue, MetaCallFuture, metacall};
fn runner(x: i32) {

    fn resolve(result: impl MetaCallValue, data: impl MetaCallValue) {
        println!("Resolve:: result: {:#?}, data: {:#?}", result, data); //
    }

    fn reject(error: impl MetaCallValue, data: impl MetaCallValue) {
        println!("Reject:: error: {:#?}, data: {:#?}", error, data);
    }

    let future = metacall::<MetaCallFuture>("doubleValueAfterTime", [1, 2000]).unwrap();
    future.then(resolve).catch(reject).await_fut();
}

Implementations§

Source§

impl MetaCallFuture

Source

pub fn then(self, resolve: MetaCallFutureHandler) -> Self

Adds a resolve callback.

§Usage example:
// Javascript script

function func_always_rejects(value, delay) {
    return new Promise((resolve) => {
        resolve('Resolve message.');
    });
}

Calling Example:

use metacall::{MetaCallValue, MetaCallFuture, metacall_no_args};
fn calling() {
    fn reject(result: impl MetaCallValue, _: impl MetaCallValue) {
        println!("Resolve:: {:#?}", result); // Resolve:: "Resolve message"
    }

    let future = metacall_no_args::<MetaCallFuture>("func_always_resolve").unwrap();
    future.then(resolve).catch(reject).await_fut();
}
Source

pub fn catch(self, reject: MetaCallFutureHandler) -> Self

Adds a reject callback.

§Usage example:
// Javascript script
function func_always_rejects(value, delay) {
    return new Promise((_, reject) => {
        reject('Error: Reject message.');
    });
}

Calling Example:

use metacall::{MetaCallValue, MetaCallFuture, metacall_no_args};
fn calling() {
    fn reject(error: impl MetaCallValue, _: impl MetaCallValue) {
        println!("Reject:: error: {:#?}", error); // Reject:: error: "Error: Reject message"
    }

    let future = metacall_no_args::<MetaCallFuture>("func_always_rejects").unwrap();
    future.then(resolve).catch(reject).await_fut();
}
Source

pub fn data<T: 'static>(self, data: T) -> Self

Adds data to use it inside the resolver and reject.

Example:

use metacall::{MetaCallValue, MetaCallFuture, metacall};

fn run() {
  let x = 10;
  fn resolve(result: impl MetaCallValue, data: impl MetaCallValue) {
      println!("X = {data}");
  }
    
  fn reject(result: impl MetaCallValue, data: impl MetaCallValue) {
      println!("X = {data}");
  }
     
  let future = metacall::<MetaCallFuture>("async_function", [1]).unwrap();
  future.then(resolve).catch(reject),data(x).await_fut();
}
Source

pub fn await_fut(self)

Awaits the future.

Trait Implementations§

Source§

impl Clone for MetaCallFuture

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MetaCallFuture

Source§

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

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

impl Drop for MetaCallFuture

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl MetaCallValue for MetaCallFuture

Equivalent to MetaCall future type.

Source§

impl Send for MetaCallFuture

Source§

impl Sync for MetaCallFuture

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.