@@ -245,7 +245,7 @@ impl ConnectionModeProvider for AccessModeConnectionModeProvider {
245
245
/// [`ApiConnectionMode::Direct`]) via a bridge ([`ApiConnectionMode::Proxied`])
246
246
/// or via any supported custom proxy protocol
247
247
/// ([`talpid_types::net::proxy::CustomProxy`]).
248
- pub struct AccessModeSelector {
248
+ pub struct AccessModeSelector < P > {
249
249
#[ cfg( feature = "api-override" ) ]
250
250
api_endpoint : ApiEndpoint ,
251
251
cmd_rx : mpsc:: UnboundedReceiver < Message > ,
@@ -261,10 +261,13 @@ pub struct AccessModeSelector {
261
261
current : ResolvedConnectionMode ,
262
262
/// `index` is used to keep track of the [`AccessMethodSetting`] to use.
263
263
index : usize ,
264
- provider : Box < dyn AllowedClientsProvider > ,
264
+ provider : P ,
265
265
}
266
266
267
- impl AccessModeSelector {
267
+ impl < P > AccessModeSelector < P >
268
+ where
269
+ P : AllowedClientsProvider + ' static ,
270
+ {
268
271
pub async fn spawn (
269
272
cache_dir : PathBuf ,
270
273
relay_selector : RelaySelector ,
@@ -273,7 +276,7 @@ impl AccessModeSelector {
273
276
#[ cfg( feature = "api-override" ) ] api_endpoint : ApiEndpoint ,
274
277
access_method_event_sender : mpsc:: UnboundedSender < ( AccessMethodEvent , oneshot:: Sender < ( ) > ) > ,
275
278
address_cache : AddressCache ,
276
- provider : Box < dyn AllowedClientsProvider > ,
279
+ provider : P ,
277
280
) -> Result < ( AccessModeSelectorHandle , AccessModeConnectionModeProvider ) > {
278
281
let ( cmd_tx, cmd_rx) = mpsc:: unbounded ( ) ;
279
282
@@ -295,7 +298,7 @@ impl AccessModeSelector {
295
298
& relay_selector,
296
299
& mut encrypted_dns_proxy_cache,
297
300
& address_cache,
298
- & * provider,
301
+ & provider,
299
302
)
300
303
. await ;
301
304
@@ -539,7 +542,7 @@ impl AccessModeSelector {
539
542
& self . relay_selector ,
540
543
& mut self . encrypted_dns_proxy_cache ,
541
544
& self . address_cache ,
542
- & * self . provider ,
545
+ & self . provider ,
543
546
)
544
547
. await
545
548
}
@@ -549,7 +552,7 @@ impl AccessModeSelector {
549
552
relay_selector : & RelaySelector ,
550
553
encrypted_dns_proxy_cache : & mut EncryptedDnsProxyState ,
551
554
address_cache : & AddressCache ,
552
- provider : & dyn AllowedClientsProvider ,
555
+ provider : & P ,
553
556
) -> Option < ResolvedConnectionMode > {
554
557
let connection_mode =
555
558
Self :: resolve_connection_mode ( access_method, relay_selector, encrypted_dns_proxy_cache)
@@ -577,7 +580,7 @@ impl AccessModeSelector {
577
580
& self . relay_selector ,
578
581
& mut self . encrypted_dns_proxy_cache ,
579
582
& self . address_cache ,
580
- & * self . provider ,
583
+ & self . provider ,
581
584
)
582
585
. await
583
586
}
@@ -587,7 +590,7 @@ impl AccessModeSelector {
587
590
relay_selector : & RelaySelector ,
588
591
encrypted_dns_proxy_cache : & mut EncryptedDnsProxyState ,
589
592
address_cache : & AddressCache ,
590
- provider : & dyn AllowedClientsProvider ,
593
+ provider : & P ,
591
594
) -> ResolvedConnectionMode {
592
595
match Self :: resolve_inner (
593
596
access_method,
@@ -651,11 +654,14 @@ impl AccessModeSelector {
651
654
}
652
655
}
653
656
654
- pub fn resolve_allowed_endpoint (
657
+ pub fn resolve_allowed_endpoint < P > (
655
658
connection_mode : & ApiConnectionMode ,
656
659
fallback : SocketAddr ,
657
- provider : & dyn AllowedClientsProvider ,
658
- ) -> AllowedEndpoint {
660
+ provider : & P ,
661
+ ) -> AllowedEndpoint
662
+ where
663
+ P : AllowedClientsProvider ,
664
+ {
659
665
let endpoint = match connection_mode. get_endpoint ( ) {
660
666
Some ( endpoint) => endpoint,
661
667
None => Endpoint :: from_socket_address ( fallback, TransportProtocol :: Tcp ) ,
0 commit comments