Crates.io | import_fn |
lib.rs | import_fn |
version | 0.1.2 |
source | src |
created_at | 2021-02-17 20:23:05.228702 |
updated_at | 2021-12-23 18:26:04.446217 |
description | Implementation of #[import_fn] macro for Crabzilla |
homepage | |
repository | https://github.com/andyherbert/crabzilla |
max_upload_size | |
id | 356618 |
size | 9,474 |
Crabzilla provides a simple interface for running JavaScript modules alongside Rust code.
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);