Skip to main content

04_advanced_routing/
04_advanced_routing.rs

1use flyer::{
2    error::Error,
3    request::Request,
4    response::{HTTP_NOT_FOUND, Response},
5    routing::next::Next,
6    server
7};
8
9pub async fn index(_req: Request, res: Response) -> Response {
10    return res.html("<h1>Users List</h1>");
11}
12
13pub async fn store(_req: Request, res: Response) -> Response {
14    return res.redirect("users/1");
15}
16
17pub async fn view(req: Request, res: Response) -> Response {
18    return res.html(format!("<h1>User {}</h1>", req.parameter("user")).as_str());
19}
20
21pub async fn update(req: Request, res: Response) -> Response {
22    return res.redirect(format!("users/{}", req.parameter("user")).as_str());
23}
24
25// When calling destroy error controller will be called because get_user_id is `None`
26pub async fn destroy(_req: Request, res: Response) -> Response {
27    let get_user_id: Option<String> = None;
28
29    get_user_id.unwrap();
30
31    return res.redirect("users")
32}
33
34pub async fn not_found(_req: Request, res: Response) -> Response {
35    res
36        .status_code(HTTP_NOT_FOUND)
37        .html("<h1>Hello World!!!</h1>")
38}
39
40pub async fn error(_error: Error, _req: Request, res: Response, _next: Next) -> Response {
41    res
42        .status_code(HTTP_NOT_FOUND)
43        .html("<h1>500 Internal Server Error</h1>")
44}
45
46fn main() {
47    let server = server("127.0.0.1", 9999);
48    
49    server.router().group("/", |router| {
50        router.group("users", |router| {
51            router.get("/", index);
52            router.post("/", store);
53            router.group("{user}", |router| {
54                router.get("/", view);
55                router.patch("/", update);
56                router.delete("/", destroy);
57            });
58        });
59    });
60
61    server.router().not_found(not_found);
62
63    server.error(error);
64
65    print!("\r\n\r\nRunning server: {}\r\n\r\n", server.address());
66
67    server.listen();
68}