1 unstable release
0.1.0 | Feb 24, 2023 |
---|
#910 in WebAssembly
26KB
626 lines
Easegress Rust SDK
This is the Rust SDK for Easegress. It can be used to extend the ability of Easegress.
Prerequisites
The following steps assume that Git and Rust are installed.
Local Development
- Clone the repo.
git clone https://github.com/LokiWager/easegress-demo
- Implement your extension in
src/lib.rs
. Please check theexamples
directory for more examples.
use std::collections::HashMap;
use std::time::Duration;
use easegress_sdk::*;
use easegress_macros::easegress_object;
// define your own struct.
#[easegress_object]
struct AddRequestHeader;
// implement Program trait for your own struct.
#[easegress_object]
impl Program for AddRequestHeader {
fn new(_params: HashMap<String, String>) -> Self {
Self {}
}
fn run(&self) -> i32 {
let v = request::get_header("Foo".to_string());
if v.len() > 10 {
log(LogLevel::Warning, format!("The length of Foo is greater than 10"));
}
if v.len() > 0 {
request::add_header("Wasm-Added".to_string(), v.clone());
}
request::set_body("I have a new body now".as_bytes().to_vec());
0
}
}
Note
- You need to implement the
Program
trait on your own struct. - Additionally, the
#[easegress_object]
attribute macro must be applied to both your struct definition and the trait impl block for it. - Only one struct with
#[easegress_object]
attribute macro is allowed.
- Add
wasm32-unknown-unknown
target.
rustup target add wasm32-unknown-unknown
- Build with this command
cargo build --target wasm32-unknown-unknown --release
If success, it will generate easegress_demo.wasm
at the target/wasm32-unknown-unknown/release
folder.
Deploy and execute
Please refer to the documentation of WasmHost
for deploying and executing the compiled Wasm code.
Dependencies
~90–265KB