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}