7个版本
0.0.6 | 2020年12月1日 |
---|---|
0.0.5 | 2020年12月1日 |
0.0.3 | 2020年11月30日 |
1474 在 WebAssembly
每月31次下载
13KB
222 行
js-bindgen
该项目目前处于非常初级的ALPHA版本,但正在为Rust和C生成一些非常基础的绑定
通过js-wasm
为各种语言生成WebAssembly到JavaScript的绑定
- Rust
- C
cargo install js-bindgen
入门指南
此项目能够将如下的JavaScript API描述(yaml格式)转换为代码:
Bindings to web console
----
- name: console
functions:
- name: clear
- name: log
parameters:
- name: msg
parameter_type: string
- name: warn
friendly_name: warning
parameters:
- name: msg
parameter_type: string
- name: error
parameters:
- name: msg
parameter_type: string
- name: time
parameters:
- name: msg
parameter_type: string
- name: timeEnd
parameters:
- name: msg
parameter_type: string
并转换为代码。
Rust
js-bindgen --lang rust console.yaml
#![no_std]
pub mod console {
use js::*;
pub fn clear(){
let func = js!(r###"function(){
console.clear();
}"###);
func.invoke_0();
}
pub fn log(msg: &str){
let a0 = msg.as_ptr() as u32;
let a1 = msg.len() as u32;
let func = js!(r###"function(msgPtr,msgLen){
console.log(this.readUtf8FromMemory(msgPtr,msgLen));
}"###);
func.invoke_2(a0, a1);
}
...
C
js-bindgen --lang c console.yaml
#include "js-wasm.h"
void console_clear(){
static int fn;
char *fn_code = "function(){ console.clear(); }";
if(fn == 0){
fn = js_register_function(fn_code,js_strlen(fn_code));
}
js_invoke_function_0(fn);
}
void console_log(char * msg){
static int fn;
unsigned int a0 = (unsigned int)msg;
unsigned int a1 = js_strlen(msg);
char *fn_code = "function(msgPtr,msgLen){ console.log(this.readUtf8FromMemory(msgPtr,msgLen)); }";
if(fn == 0){
fn = js_register_function(fn_code,js_strlen(fn_code));
}
js_invoke_function_2(fn, a0, a1);
}
...
自定义代码
有时你可能想要创建绑定到不存在的代码,但仍能生成适用于多个目标的库
- namespace: unicorn
functions:
makeUnicorns:
code: |
function() {
console.log("🦄🦄🦄")
}
依赖项
~9–19MB
~250K SLoC