tide-rhai

Crates.iotide-rhai
lib.rstide-rhai
version0.0.2
sourcesrc
created_at2021-04-03 21:08:18.195613
updated_at2021-04-05 12:41:45.467343
descriptionA scritping component for tide.
homepage
repositoryhttps://github.com/no9/tide-rhai
max_upload_size
id378489
size86,182
Anton Whalley (No9)

documentation

https://docs.rs/tide-rhai

README

tide-rhai

A scripting engine for tide.

Crates.io version Download docs.rs docs

API Docs | Releases | Contributing

Overview

This component provides the ability to run rhai scripts to process http requests in tide. Currently it only supprts modifying the messages but additional features such as a http client are being considered.

Install

$ cargo add tide-rhai

Example

Create a tide server that points to a directory containing rhai scripts.

use tide_rhai::RhaiDir;
#[async_std::main]
async fn main() -> Result<(), std::io::Error> {
    tide::log::start();
    let mut app = tide::new();
    app.at("/*")
        .get(RhaiDir::new("/*", "./").unwrap());
    app.listen("127.0.0.1:8080").await?;
    Ok(())
}

The first parameter for new is the prefix and should be mapped to the at parameter. The second is the folder with the rhai scripts in

Creat a rhai script called headers.rhai that selects a header and returns it in a JSON Message. Note it doesn't have to be called .rhai but VS Code has suppport for that file extention.

let obj = #{};
obj.message = "Is this acceptable?" + ctx.headers["accept"];
obj

Here we are using the headers property of the context object. If this was a POST then the ctx object would also contain a data property with the JSON that has been sent to the server.

When you now run to https://localhost:8080/headers.rhai you should see the following:

{"message":"Is this acceptable?text/html,application/xhtml+xml,application/xml;q=0.9,
image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"}

This example can also be ran by cloning this repository and running

$ cargo run --example samples

Then browse to:

http://localhost:8080/helloworld.rhai http://localhost:8080/headers.rhai http://localhost:8080/fetch.rhai

Todo List

  • Logging - Integrate with tide logging system
  • Http Client - A fetch-like API
  • Benchmarks - Set of scripts to manage regressions
  • Observability - Support for BPF/DTrace probes. Maybe flamegraphs or statemaps
  • Module System - Rhai supports modules but doesn't have a modeue system.
Commit count: 15

cargo fmt