13 releases
0.1.12 | Jun 13, 2021 |
---|---|
0.1.11 | Jun 1, 2021 |
0.1.10 | May 31, 2021 |
0.1.5 | Apr 26, 2021 |
0.1.1 | Oct 12, 2020 |
#2 in #conn
29KB
560 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![fetch_session, validate_user, home],
},
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
~11–15MB
~279K SLoC