-
Notifications
You must be signed in to change notification settings - Fork 324
/
Copy pathstate.rs
34 lines (31 loc) · 878 Bytes
/
state.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
use std::sync::atomic::{AtomicU32, Ordering};
use std::sync::Arc;
#[derive(Clone)]
struct State {
value: Arc<AtomicU32>,
}
impl State {
fn new() -> Self {
Self {
value: Arc::new(AtomicU32::new(0)),
}
}
}
#[async_std::main]
async fn main() -> tide::Result<()> {
femme::start();
let mut app = tide::with_state(State::new());
app.with(tide::log::LogMiddleware::new());
app.at("/").get(|req: tide::Request<State>| async move {
let state = req.state();
let value = state.value.load(Ordering::Relaxed);
Ok(format!("{}\n", value))
});
app.at("/inc").get(|req: tide::Request<State>| async move {
let state = req.state();
let value = state.value.fetch_add(1, Ordering::Relaxed) + 1;
Ok(format!("{}\n", value))
});
app.listen("127.0.0.1:8080").await?;
Ok(())
}