mirror of
https://github.com/actix/actix-website
synced 2024-11-30 19:14:36 +01:00
63 lines
1.2 KiB
Rust
63 lines
1.2 KiB
Rust
|
// <setup>
|
||
|
use std::cell::Cell;
|
||
|
use actix_web::{App, HttpRequest, http};
|
||
|
|
||
|
// This struct represents state
|
||
|
struct AppState {
|
||
|
counter: Cell<usize>,
|
||
|
}
|
||
|
|
||
|
fn index(req: HttpRequest<AppState>) -> String {
|
||
|
let count = req.state().counter.get() + 1; // <- get count
|
||
|
req.state().counter.set(count); // <- store new count in state
|
||
|
|
||
|
format!("Request number: {}", count) // <- response with count
|
||
|
}
|
||
|
// </setup>
|
||
|
|
||
|
fn make_app() {
|
||
|
|
||
|
// <make_app>
|
||
|
App::with_state(AppState { counter: Cell::new(0) })
|
||
|
.resource("/", |r| r.method(http::Method::GET).f(index))
|
||
|
.finish()
|
||
|
// </make_app>
|
||
|
;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
use std::thread;
|
||
|
use actix_web::{server, HttpResponse};
|
||
|
|
||
|
fn combine() {
|
||
|
thread::spawn(|| {
|
||
|
// <combine>
|
||
|
struct State1;
|
||
|
struct State2;
|
||
|
|
||
|
fn main() {
|
||
|
server::new(|| {
|
||
|
vec![
|
||
|
App::with_state(State1)
|
||
|
.prefix("/app1")
|
||
|
.resource("/", |r| r.f(|r| HttpResponse::Ok()))
|
||
|
.boxed(),
|
||
|
App::with_state(State2)
|
||
|
.prefix("/app2")
|
||
|
.resource("/", |r| r.f(|r| HttpResponse::Ok()))
|
||
|
.boxed()
|
||
|
]
|
||
|
})
|
||
|
.bind("127.0.0.1:8080").unwrap()
|
||
|
.run()
|
||
|
}
|
||
|
// </combine>
|
||
|
});
|
||
|
}
|
||
|
|
||
|
pub fn test() {
|
||
|
make_app();
|
||
|
combine();
|
||
|
}
|