A simple request router

Designed to be wasm compatible, simple and small.

```rust extern crate alloc; use alloc::borrow::Cow;

use mimeograph_router::*;

/// A request could be an http crate Request, or a CloudFlare /// worker Request. Here is a very simple request: pub struct Request { path: String, method: String, }

/// To use the router, implement mimeograph_request::Request /// for the Request type that you are working with. impl mimeographrequest::Request for Request { fn path(&self) -> Cow<', str> { Cow::Borrowed(&self.path) } fn method(&self) -> Cow<'_, str> { Cow::Borrowed(&self.method) } }

/// A dummy Response type pub struct Response { status: u32, body: String, }

type Result = core::result::Result>;

[get("/hello")]

fn get_hello(request: Request) -> Result { Ok(Response { status: 200, body: String::from("world"), }) }

[get("/greet/:name")]

fn get_greeting(request: Request, name: &str) -> Result { Ok(Response { status: 200, body: format!("Hello, {}!", name), }) }

// Wildcard segment

[get("/foo/*/baz/:name")]

fn foobazname(request: Request, name: &str) -> Result { Ok(Response { status: 200, body: format!("Hello, {}!", name), }) }

// Glob, matches everything after /page/, ie: /page/hello/world

[get("/page/**")]

fn page_glob(request: Request) -> Result { Ok(Response { status: 200, body: String::from("Hello, World"), }) }

/// All verbs are supported: /// get, put, post, delete, head, patch, options

[post("/images")]

fn post_image(request: Request) -> Result { // handle request unimplemented!() }

/// The entrypoint for handling a request pub fn handlerequest(request: Request) -> Response { // router![] creates a closure that iterates through // the handlers until one is matched, then it returns // the matched handler's response let routes = routes![gethello, getgreeting, foobazname, pageglob];

match router(request, routes) {
    // Matched a route
    RouterResult::Handled(Ok(resp)) => resp,
    // There was an error
    RouterResult::Handled(Err(_err)) => todo!(),
    // No routes matched, request is passed back
    RouterResult::NotHandled(_request) => todo!(),
}

} ```