Skip to content

Commit

Permalink
Rework state example to put Arc inside State
Browse files Browse the repository at this point in the history
  • Loading branch information
joshtriplett committed Nov 13, 2020
1 parent b7e30fe commit c8e2118
Showing 1 changed file with 14 additions and 15 deletions.
29 changes: 14 additions & 15 deletions examples/state.rs
Original file line number Diff line number Diff line change
@@ -1,34 +1,33 @@
use std::sync::atomic::{AtomicU32, Ordering};
use std::sync::Arc;

#[derive(Clone)]
struct State {
value: AtomicU32,
value: Arc<AtomicU32>,
}

impl State {
fn new() -> Self {
Self {
value: AtomicU32::new(0),
value: Arc::new(AtomicU32::new(0)),
}
}
}

#[async_std::main]
async fn main() -> tide::Result<()> {
tide::log::start();
let mut app = tide::with_state(Arc::new(State::new()));
app.at("/")
.get(|req: tide::Request<Arc<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<Arc<State>>| async move {
let state = req.state();
let value = state.value.fetch_add(1, Ordering::Relaxed) + 1;
Ok(format!("{}\n", value))
});
let mut app = tide::with_state(State::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(())
}

0 comments on commit c8e2118

Please sign in to comment.