use std::time::Duration;
use axum::{Router, routing::get};
use tokio::net::TcpListener;
use tower::ServiceBuilder;
use tower_acc::{ConcurrencyLimitLayer, Vegas};
async fn handler() -> &'static str {
tokio::time::sleep(Duration::from_millis(50)).await;
"Hello, world!\n"
}
#[tokio::main]
async fn main() {
let algorithm = Vegas::builder().initial_limit(10).max_limit(100).build();
let app = Router::new()
.route("/", get(handler))
.layer(ServiceBuilder::new().layer(ConcurrencyLimitLayer::new(algorithm)));
let listener = TcpListener::bind("0.0.0.0:3000").await.unwrap();
println!("Listening on http://localhost:3000");
axum::serve(listener, app).await.unwrap();
}