This is the Rust SDK for Easegress. It can be used to extend the ability of Easegress.
The following steps assume that Git and Rust are installed.
- Clone the repo.
git clone https://github.com/megaease/easegress-rust-demo.git
- 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.
Please refer to the documentation of WasmHost
for deploying and executing the compiled Wasm code.