1 个稳定版本
1.0.0 | 2023 年 12 月 12 日 |
---|
#792 in WebAssembly
14KB
169 行
rline_macro
一个用于生成具有自定义序列化格式的 WebAssembly stubs 的 Rust 程序化宏。
概述
rline_bindgen
是一个用于简化生成 Rust 函数 WebAssembly (Wasm) stubs 的程序化宏属性。它允许您选择输入和输出的序列化格式,支持 "bincode" 和 "json"。
安装
将以下行添加到您的 Cargo.toml
文件中
[dependencies]
rline_macro = "1.0"
数据类型
Row
定义在 rline_api
中。它是数据处理中的基本项。
由宏封装的函数接受一个 Row 作为参数。在成功的情况下返回包含生成的 Row 的 Result<Row, String>
,或者在失败的情况下返回错误信息。
示例
默认格式
use rline_api::row::Row;
use rline_api::value::Value;
use rline_macro::rline_bindgen;
/// Transform each string value to uppercase using
/// the default serialization format.
#[rline_bindgen]
pub fn uppercase(row: Row) -> Result<Row, String> {
let mut result = Row::with_capacity(row.len());
for (column_name, value) in row {
match value {
Value::String(s) => result.insert(
column_name,
Value::from(s.to_uppercase())
),
_ => result.insert(column_name, value),
};
}
Ok(result)
}
显式指定 json 格式
use rline_api::row::Row;
use rline_api::value::Value;
use rline_macro::rline_bindgen;
/// Repeat one time each string value using
/// the json serialization format.
#[rline_bindgen(json)]
pub fn repeat_json(row: Row) -> Result<Row, String> {
// You are able to write to stderr.
eprintln!("Printing to stderr from the Wasm");
// However, writing to stdout will be ignored.
println!("Printing to stdout will be ignored");
let mut result = Row::with_capacity(row.len());
for (column_name, value) in row {
match value {
Value::String(s) => result.insert(
column_name,
Value::from(s.repeat(2))
),
_ => result.insert(column_name, value),
};
}
Ok(result)
}
显式指定 bincode 格式
use rline_api::row::Row;
use rline_api::value::Value;
use rline_macro::rline_bindgen;
/// Transform each string value to to_lowercase using
/// the bincode serialization format.
#[rline_bindgen(bincode)]
pub fn lowercase_bincode(row: Row) -> Result<Row, String> {
let mut result = Row::with_capacity(row.len());
for (column_name, value) in row {
match value {
Value::String(s) => result.insert(
column_name,
Value::from(s.to_lowercase())
),
_ => result.insert(column_name, value),
};
}
Ok(result)
}
致谢
此 crate 受 wasmedge-bindgen
启发,https://github.com/second-state/wasmedge-bindgen,在 MIT/Apache v2 许可下。
依赖项
~270–720KB
~17K SLoC