cookie/
main.rs

1use std::sync::Arc;
2
3use cookie::Cookie;
4use haro::{middleware, Application, DynHandler, Request, Response};
5use http::header::SET_COOKIE;
6use serde_json::json;
7
8fn main() {
9    let mut app = Application::new("0:8080");
10    app.middleware(middleware::logging);
11    app.middleware(session_middleware);
12    app.route("/", index);
13    app.route("/hello/:name", hello);
14    app.run();
15}
16
17fn index(_: Request) -> Response {
18    Response::str("Hello Haro")
19}
20
21fn hello(req: Request) -> Response {
22    let data = json!({
23        "method":req.method(),
24        "args":req.args,
25        "params":req.params,
26        "data":req.data,
27    });
28    Response::json(data)
29}
30
31fn session_middleware(next: DynHandler) -> DynHandler {
32    Arc::new(move |req: Request| -> Response {
33        let cookies = req.cookies();
34        println!("get cookies: {cookies:?}");
35
36        let mut res = next(req);
37
38        let cookie1 = Cookie::build("foo", "bar").finish();
39        let cookie2 = Cookie::build("bar", "baz")
40            .domain("example.coom")
41            .path("/")
42            .secure(true)
43            .http_only(true)
44            .finish();
45        res = res.header(SET_COOKIE, &cookie1.to_string());
46        res.header(SET_COOKIE, &cookie2.to_string())
47    })
48}