1 个稳定版本
1.0.0 | 2022年5月5日 |
---|
#620 in WebAssembly
8KB
84 行
打孔_API是打孔WebAssembly公共API。
它包含允许您编写能够在打孔上作为FaaS运行的wasm函数的接口。
使用方法
- 定义您函数的输入和输出类型。它们必须分别实现
serde::Deserialize
和serde::Serialize
特质。 - 通过为您定义的类型实现
punch_api::Function
特质来定义您的自定义函数。 - 通过在该类型上调用
register!
宏来注册前面的类型。 - 您可以通过返回一个包含错误信息的
punch_api::Error
来引发错误。
Et voilà ! 通过将您的库编译为wasm,您可以在打孔上运行您的Function
。
use punch_api::{Error, Function, register};
use serde::{Deserialize, Serialize};
#[derive(Deserialize)]
pub struct InputValue {
log: String
}
#[derive(Serialize)]
pub struct OutputValue {
log_wasm: String,
size: usize
}
pub struct MyCustomFunction;
impl Function<'_, InputValue, OutputValue> for MyCustomFunction {
fn execute(&self, input: InputValue) -> Result<Box<OutputValue>, Box<Error>> {
let input_log_size = input.log.len();
if input_log_size < 20 {
let error = Error::new(format!(
"Invalid log: {}, expected size >= 20, got={}", input.log, input_log_size)
);
return Err(Box::new(error))
}
let result = OutputValue {
log_wasm: format!("WASM - received log: *** {} ***", input.log),
size: input_log_size
};
Ok(Box::new(result))
}
}
register!(MyCustomFunction);
punch_api::Function特质
punch_api::Function
是一个泛型特质,它接受三个参数:一个生命周期参数、一个输入类型和一个输出类型。
该特质定义了一个名为execute
的方法,该方法返回一个指向结果的指针,该结果提供了一个名为input
的参数。您可以在该方法中实现您的数据逻辑。
/// The Function trait is the interface for runnable functions on Punch FaaS.
///
/// # Arguments
///
/// * `'a` - lifetime parameter for serde::Deserialize
/// * `InputType` - input type. It implements the trait serde::Deserialize
/// * `OutputType` - output type. It implements the trait serde::Serialize
pub trait Function<'a, InputType: serde::Deserialize<'a>, OutputType: serde::Serialize> {
/// Returns a pointer to the computed result.
///
/// # Arguments
///
/// * `input` - function input
fn execute(&self, input: InputType) -> Result<Box<OutputType>, Box<punch_api::Error>>;
}
依赖项
~0.6–1.4MB
~31K SLoC