3 个版本
0.1.2 | 2021 年 12 月 23 日 |
---|---|
0.1.1 | 2021 年 2 月 28 日 |
0.1.0 | 2021 年 2 月 17 日 |
#2164 在 解析器实现
10KB
142 行
Crabzilla
Crabzilla 为运行 JavaScript 模块与 Rust 代码并行运行提供了一个 简单 的接口。
示例
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);
}
}
在 module.js
const user = Stdin.read();
Stdout.sayHello(user);
lib.rs
:
Crabzilla 为运行 JavaScript 模块与 Rust 代码并行运行提供了一个 简单 的接口。
示例
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(string) = args.get(0) {
if let Value::String(string) = string {
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);
}
}
在 module.js
const user = Stdin.read();
Stdout.sayHello(user);
依赖项
~82MB
~1.5M SLoC