2
2
3
3
use crate :: config;
4
4
use crate :: db:: { ConnectionConfig , connection_url, make_manager_config} ;
5
+ use std:: collections:: HashMap ;
5
6
use std:: sync:: Arc ;
6
7
7
8
use crate :: email:: Emails ;
8
9
use crate :: metrics:: { InstanceMetrics , ServiceMetrics } ;
9
- use crate :: rate_limiter:: RateLimiter ;
10
+ use crate :: rate_limiter:: { LimitedAction , RateLimiter , RateLimiterConfig } ;
10
11
use crate :: storage:: { Storage , StorageConfig } ;
11
12
use axum:: extract:: { FromRef , FromRequestParts , State } ;
12
13
use bon:: Builder ;
@@ -152,6 +153,16 @@ impl<S: app_builder::State> AppBuilder<S> {
152
153
{
153
154
self . storage ( Arc :: new ( Storage :: from_config ( config) ) )
154
155
}
156
+
157
+ pub fn rate_limiter_from_config (
158
+ self ,
159
+ config : HashMap < LimitedAction , RateLimiterConfig > ,
160
+ ) -> AppBuilder < app_builder:: SetRateLimiter < S > >
161
+ where
162
+ S :: RateLimiter : app_builder:: IsUnset ,
163
+ {
164
+ self . rate_limiter ( RateLimiter :: new ( config) )
165
+ }
155
166
}
156
167
157
168
impl App {
@@ -169,7 +180,7 @@ impl App {
169
180
. github_oauth_from_config ( & config)
170
181
. emails ( emails)
171
182
. storage_from_config ( & config. storage )
172
- . rate_limiter ( RateLimiter :: new ( config. rate_limiter . clone ( ) ) )
183
+ . rate_limiter_from_config ( config. rate_limiter . clone ( ) )
173
184
. config ( Arc :: new ( config) )
174
185
. build ( )
175
186
}
0 commit comments