1 个稳定版本

1.0.0 2022年5月5日

#620 in WebAssembly

Apache-2.0

8KB
84

打孔_API是打孔WebAssembly公共API。
它包含允许您编写能够在打孔上作为FaaS运行的wasm函数的接口。

使用方法

  1. 定义您函数的输入和输出类型。它们必须分别实现serde::Deserializeserde::Serialize特质。
  2. 通过为您定义的类型实现punch_api::Function特质来定义您的自定义函数。
  3. 通过在该类型上调用register!宏来注册前面的类型。
  4. 您可以通过返回一个包含错误信息的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