#interface #introspection #dtypei

dtypei-derive

反射 - 为您的Rust导出提供接口描述

1 个不稳定版本

0.0.1 2020年1月21日

#64 in #introspection

GPL-3.0-or-later

13KB
253

dtypei

为您的Rust导出构建接口描述对象。

这是一个正在进行中的项目,当前版本没有安全保证。欢迎提出建议和贡献。

#[macro_use]
extern crate dtypei_derive;

use dtypei;

#[dtypei_attr()]
pub fn sum(n1: i32, n2: i32) -> i32 {
    n1 + n2
}

#[dtypei_enum()]
pub enum Material {
    Wood,
    Metal,
    Plastic,
}

#[dtypei_struct()]
pub struct WoodFinish {
    pub sanded: bool,
    pub varnished: bool,
    pub polished: bool,
}

#[dtypei_struct()]
pub struct Table {
    pub id: u64,
    pub legs: u8,
    pub material: Material,
    pub finish: WoodFinish,
}

#[dtypei_attr()]
pub fn polish(mut table: Table) -> Table {
    table.finish.polished = true;
    table
}

#[dtypei_attr()]
pub fn typedinterface() -> Vec<dtypei::Typei> {

}

dtypei_attr 宏会将接口对象填充到 typedinterface 函数中。例如。

[Typei { name: "sum", inputs: [SubTypes { name: "i32", label: "n1", dimensions: [] }, SubTypes { name: "i32", label: "n2", dimensions: [] }], outputs: [SubTypes { name: "sum", label: "i32", dimensions: [] }] }]

当使用 #[wasm_bindgen] 时,使用此宏顺序

#[wasm_bindgen]
#[dtypei_attr()]
pub fn sum(n1: i32, n2: i32) -> i32 {
    n1 + n2
}

检查 ./tests 示例。

cd tests/dtypeitest
cargo build
cargo run target/debug/dtypeitest

WebAssembly 测试

cd tests/mathi
wasm-pack build

cd tests/www
npm install
npm run start

检查浏览器日志。

GPLv3 - 查看 ./LICENSE

依赖

~2–3MB
~64K SLoC