punch_api is the Punch WebAssembly public API.
It consists of interfaces allowing you to write wasm functions able to run on the Punch as FaaS.
serde::Deserialize
and
serde::Serialize
traits.punch_api::Function
trait for the type you define.register!
macro on it.punch_api::Error
with an error message.Et voilĂ ! By compiling your library to wasm, you are able to run your Function
on the Punch.
```rust use punch_api::{Error, Function, register}; use serde::{Deserialize, Serialize};
pub struct InputValue { log: String }
pub struct OutputValue { log_wasm: String, size: usize }
pub struct MyCustomFunction;
impl Function<', InputValue, OutputValue> for MyCustomFunction {
fn execute(&self, input: InputValue) -> Result
let result = OutputValue {
log_wasm: format!("WASM - received log: *** {} ***", input.log),
size: input_log_size
};
Ok(Box::new(result))
}
}
register!(MyCustomFunction); ```
The punch_api::Function
is a generic trait taking 3 arguments: a lifetime parameter, an input type and an output type.
The trait defines a method execute
that returns a pointer to the result giving the argument input
.
You may implement your data logic in this method.
rust
/// 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>>;
}