1 unstable release

0.1.0 Feb 24, 2023

#910 in WebAssembly

Apache-2.0

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

  1. Clone the repo.
git clone https://github.com/LokiWager/easegress-demo
  1. Implement your extension in src/lib.rs. Please check the examples 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.
  1. Add wasm32-unknown-unknown target.
rustup target add wasm32-unknown-unknown 
  1. 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