You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.5 KiB
Rust
60 lines
1.5 KiB
Rust
3 years ago
|
#[macro_use]
|
||
|
extern crate lazy_static;
|
||
|
|
||
|
mod utils;
|
||
|
mod router;
|
||
|
|
||
|
use cfg_if::cfg_if;
|
||
|
use utils::{Error, MyResult};
|
||
|
use wasm_bindgen::prelude::*;
|
||
|
use web_sys::*;
|
||
|
|
||
|
cfg_if! {
|
||
|
// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global
|
||
|
// allocator.
|
||
|
if #[cfg(feature = "wee_alloc")] {
|
||
|
extern crate wee_alloc;
|
||
|
#[global_allocator]
|
||
|
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
lazy_static! {
|
||
|
static ref ROUTER: router::Router = {
|
||
|
build_routes()
|
||
|
};
|
||
|
}
|
||
|
|
||
|
fn build_routes() -> router::Router {
|
||
|
let mut router = router::Router::new(&default_route);
|
||
|
router.add_route("/hello", &hello_world);
|
||
|
return router;
|
||
|
}
|
||
|
|
||
|
async fn default_route(_req: Request, _url: Url) -> MyResult<Response> {
|
||
|
Err(Error::NotFound("This page is not available".into()))
|
||
|
}
|
||
|
|
||
|
async fn hello_world(_req: Request, _url: Url) -> MyResult<Response> {
|
||
|
Ok(Response::new_with_opt_str_and_init(
|
||
|
Some("Hello, world from Rust"),
|
||
|
ResponseInit::new().status(200)
|
||
|
).unwrap())
|
||
|
}
|
||
|
|
||
|
#[wasm_bindgen]
|
||
|
pub async fn handle_request_rs(req: Request) -> Response {
|
||
|
let url = Url::new(&req.url()).unwrap();
|
||
|
let result = ROUTER.execute(req, url).await;
|
||
|
|
||
|
match result {
|
||
|
Ok(resp) => resp,
|
||
|
Err(err) => {
|
||
|
let code = err.status_code();
|
||
|
let reason: String = err.into();
|
||
|
Response::new_with_opt_str_and_init(
|
||
|
Some(&reason), ResponseInit::new().status(code)
|
||
|
).unwrap()
|
||
|
}
|
||
|
}
|
||
|
}
|