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