import_fn

Crates.ioimport_fn
lib.rsimport_fn
version0.1.2
sourcesrc
created_at2021-02-17 20:23:05.228702
updated_at2021-12-23 18:26:04.446217
descriptionImplementation of #[import_fn] macro for Crabzilla
homepage
repositoryhttps://github.com/andyherbert/crabzilla
max_upload_size
id356618
size9,474
Andy (andyherbert)

documentation

README

Crabzilla

Crabzilla provides a simple interface for running JavaScript modules alongside Rust code.

Example

use crabzilla::*;
use std::io::stdin;

#[import_fn(name = "read", scope = "Stdin")]
fn read_from_stdin() -> Value {
    let mut buffer = String::new();
    println!("Type your name: ");
    stdin().read_line(&mut buffer)?;
    buffer.pop(); // Remove newline
    if buffer.is_empty() {
        throw!("Expected name!");
    }
    json!(buffer)
}

#[import_fn(name = "sayHello", scope = "Stdout")]
fn say_hello(args: Vec<Value>) {
    if let Some(Value::String(string)) = args.get(0) {
        println!("Hello, {}", string);
    }
}

#[tokio::main]
async fn main() {
    let mut runtime = runtime! {
        read_from_stdin,
        say_hello,
    };
    if let Err(error) = runtime.load_module("./module.js").await {
        eprintln!("{}", error);
    }
}

In module.js:

const user = Stdin.read();
Stdout.sayHello(user);
Commit count: 14

cargo fmt