4 releases

new 0.1.3 Nov 22, 2020
0.1.2 Nov 19, 2020
0.1.1 Oct 12, 2020
0.1.0 Oct 9, 2020

#85 in Template engine

23 downloads per month

MIT license

26KB
452 lines

Confetti 🎉

Fun with CloudFlare Workers

🐑 Use wrangler generate to Clone this Template

Learn more about wrangler generate here.

wrangler generate wasm-worker https://github.com/pinatasoftware/confetti-template.git
cd wasm-worker

🎉 Confeti helps with requests

Routes

Each route has a pattern a list of middlewares:

Route {
    pattern: (Method::Get, "/"),
    middlewares: vec![Middleware::new(validate_user), Middleware::new(hello)],
}

Each middleware is run one after the other. If any middleware halts then the response is sent immediately and all remaining middlewares will not run

Middlewares

Middlewares are async functions that receive and return a Conn

pub async fn hello(conn: Conn) -> Conn {
    let mut headers = conn.resp_headers;
    headers.insert("Content-Type".to_string(), "text/html".to_string());
    let content = "<h1>Hello World from Confetti</h1>";
    return Conn {
        resp_headers: headers,
        resp_body: content.to_string(),
        status: 200,
        ..conn
    };
}

The Conn struct

pub struct Conn {
    // Request
    pub host: String,
    pub method: Method,
    pub port: u16,
    pub scheme: String,
    pub path: String,
    pub query_string: String,
    pub req_body: String,
    pub req_headers: HashMap<String, String>,
    pub cf: HashMap<String, String>,
    // Response
    pub resp_body: String,
    pub resp_headers: HashMap<String, String>,
    pub status: u16,
    // Connection
    pub assigns: HashMap<String, String>,
    pub halted: bool,
}

🛠️ Build with wasm-pack build

wasm-pack build

🔬 Test in Headless Browsers with wasm-pack test

wasm-pack test --headless --firefox

Dependencies

~11MB
~232K SLoC