# Confetti 🎉 ## Fun with CloudFlare Workers ### 🐑 Use `wrangler generate` to Clone this Template [Learn more about `wrangler generate` here.](https://github.com/cloudflare/wrangler) ``` 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: ```rust 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 ```rust 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 = "

Hello World from Confetti

"; return Conn { resp_headers: headers, resp_body: content.to_string(), status: 200, ..conn }; } ``` #### The Conn struct ```rust 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, pub cf: HashMap, // Response pub resp_body: String, pub resp_headers: HashMap, pub status: u16, // Connection pub assigns: HashMap, pub halted: bool, } ``` ### 🛠️ Build with `wasm-pack build` ``` wasm-pack build ``` ### 🔬 Test in Headless Browsers with `wasm-pack test` ``` wasm-pack test --headless --firefox ```