rustyscript 0.11.0

Effortless JS Integration for Rust
Documentation
///
/// This example shows how to use `Runtime::eval` to run async code
/// Note that there is no support for top-level await but you can use `Promise` to work around this
///
use rustyscript::{js_value::Promise, Error, Runtime};

fn main() -> Result<(), Error> {
    // Create a new runtime
    let mut runtime = Runtime::new(Default::default())?;
    let tokio_runtime = runtime.tokio_runtime();

    // A little setup for later
    // The `::<()>` is a type hint to the compiler that we don't need a return value
    // Previously it could be left out, but now it will cause a warning, and in the future an error
    runtime.eval::<()>(
        "globalThis.sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));",
    )?;

    // Can be run as blocking
    runtime.eval::<u32>("sleep(1000).then(() => 1)")?;

    // Or as async
    let future = async {
        let result: Promise<u32> = runtime.eval_immediate("sleep(1000).then(() => 2)").await?;
        result.into_future(&mut runtime).await?;

        Ok::<(), Error>(())
    };
    tokio_runtime.block_on(future)?;

    Ok(())
}