-
Notifications
You must be signed in to change notification settings - Fork 40
Open
Description
Hello, I would like to extract your limiter in a function, to import it from a separate file in an Axum server.
use axum::{Router, routing::get};
use dotenvy::dotenv;
use std::{env, sync::Arc};
mod middleware;
mod models;
mod router;
use middleware::cors::get_cors;
use router::user::user_routes;
use tower_governor::{GovernorLayer, governor::GovernorConfigBuilder};
fn get_rate_limiter() {
let rate_limiter = Arc::new(
GovernorConfigBuilder::default()
.per_second(2)
.burst_size(5)
.finish()
.unwrap(),
);
GovernorLayer {
config: get_rate_limiter(),
}
}
#[tokio::main]
async fn main() {
dotenv().ok();
let server_port = env::var("SERVER_PORT").unwrap();
let app = Router::new()
.nest("/", user_routes())
.layer(get_cors())
.layer(get_rate_limiter());
let listener = tokio::net::TcpListener::bind(&server_port).await.unwrap();
println!("🔥 Server running on {}", server_port);
axum::serve(listener, app).await.unwrap();
}
The get_rate_limiter
return the following type error:
mismatched types expected unit type
()
found structGovernorLayer<_, _>
So I wrote
fn get_rate_limiter() -> GovernorLayer<PeerIpKeyExtractor, _> {}
And the error is refined to:
cannot find type
RateLimitingMiddleware
in this scope
It seems i can't import RateLimitingMiddleware
. How to fix this typing issue? Thanks!
Metadata
Metadata
Assignees
Labels
No labels