@@ -160,17 +160,39 @@ impl Backend {
160
160
#[ cfg( feature = "curl-backend" ) ]
161
161
Self :: Curl => curl:: download ( url, resume_from, callback) ,
162
162
#[ cfg( any( feature = "reqwest-rustls-tls" , feature = "reqwest-native-tls" ) ) ]
163
- Self :: Reqwest ( tls) => reqwest_be :: download ( url, resume_from, callback, tls ) . await ,
163
+ Self :: Reqwest ( tls) => tls . download ( url, resume_from, callback) . await ,
164
164
}
165
165
}
166
166
}
167
167
168
+ #[ cfg( any( feature = "reqwest-rustls-tls" , feature = "reqwest-native-tls" ) ) ]
168
169
#[ derive( Debug , Copy , Clone ) ]
169
170
pub enum TlsBackend {
171
+ #[ cfg( feature = "reqwest-rustls-tls" ) ]
170
172
Rustls ,
173
+ #[ cfg( feature = "reqwest-native-tls" ) ]
171
174
NativeTls ,
172
175
}
173
176
177
+ #[ cfg( any( feature = "reqwest-rustls-tls" , feature = "reqwest-native-tls" ) ) ]
178
+ impl TlsBackend {
179
+ async fn download (
180
+ self ,
181
+ url : & Url ,
182
+ resume_from : u64 ,
183
+ callback : DownloadCallback < ' _ > ,
184
+ ) -> Result < ( ) > {
185
+ let client = match self {
186
+ #[ cfg( feature = "reqwest-rustls-tls" ) ]
187
+ Self :: Rustls => & reqwest_be:: CLIENT_RUSTLS_TLS ,
188
+ #[ cfg( feature = "reqwest-native-tls" ) ]
189
+ Self :: NativeTls => & reqwest_be:: CLIENT_NATIVE_TLS ,
190
+ } ;
191
+
192
+ reqwest_be:: download ( url, resume_from, callback, client) . await
193
+ }
194
+ }
195
+
174
196
#[ derive( Debug , Copy , Clone ) ]
175
197
pub enum Event < ' a > {
176
198
ResumingPartialDownload ,
@@ -298,12 +320,6 @@ pub mod curl {
298
320
299
321
#[ cfg( any( feature = "reqwest-rustls-tls" , feature = "reqwest-native-tls" ) ) ]
300
322
pub mod reqwest_be {
301
- #[ cfg( all(
302
- not( feature = "reqwest-rustls-tls" ) ,
303
- not( feature = "reqwest-native-tls" )
304
- ) ) ]
305
- compile_error ! ( "Must select a reqwest TLS backend" ) ;
306
-
307
323
use std:: io;
308
324
#[ cfg( feature = "reqwest-rustls-tls" ) ]
309
325
use std:: sync:: Arc ;
@@ -320,20 +336,20 @@ pub mod reqwest_be {
320
336
use tokio_stream:: StreamExt ;
321
337
use url:: Url ;
322
338
323
- use super :: { DownloadError , Event , TlsBackend } ;
339
+ use super :: { DownloadError , Event } ;
324
340
325
341
pub async fn download (
326
342
url : & Url ,
327
343
resume_from : u64 ,
328
344
callback : & dyn Fn ( Event < ' _ > ) -> Result < ( ) > ,
329
- tls : TlsBackend ,
345
+ client : & Client ,
330
346
) -> Result < ( ) > {
331
347
// Short-circuit reqwest for the "file:" URL scheme
332
348
if download_from_file_url ( url, resume_from, callback) ? {
333
349
return Ok ( ( ) ) ;
334
350
}
335
351
336
- let res = request ( url, resume_from, tls )
352
+ let res = request ( url, resume_from, client )
337
353
. await
338
354
. context ( "failed to make network request" ) ?;
339
355
@@ -367,7 +383,7 @@ pub mod reqwest_be {
367
383
}
368
384
369
385
#[ cfg( feature = "reqwest-rustls-tls" ) ]
370
- static CLIENT_RUSTLS_TLS : LazyLock < Client > = LazyLock :: new ( || {
386
+ pub ( super ) static CLIENT_RUSTLS_TLS : LazyLock < Client > = LazyLock :: new ( || {
371
387
let catcher = || {
372
388
client_generic ( )
373
389
. use_preconfigured_tls (
@@ -393,7 +409,7 @@ pub mod reqwest_be {
393
409
} ) ;
394
410
395
411
#[ cfg( feature = "reqwest-native-tls" ) ]
396
- static CLIENT_DEFAULT_TLS : LazyLock < Client > = LazyLock :: new ( || {
412
+ pub ( super ) static CLIENT_NATIVE_TLS : LazyLock < Client > = LazyLock :: new ( || {
397
413
let catcher = || {
398
414
client_generic ( )
399
415
. user_agent ( super :: REQWEST_DEFAULT_TLS_USER_AGENT )
@@ -416,22 +432,8 @@ pub mod reqwest_be {
416
432
async fn request (
417
433
url : & Url ,
418
434
resume_from : u64 ,
419
- backend : TlsBackend ,
435
+ client : & Client ,
420
436
) -> Result < Response , DownloadError > {
421
- let client: & Client = match backend {
422
- #[ cfg( feature = "reqwest-rustls-tls" ) ]
423
- TlsBackend :: Rustls => & CLIENT_RUSTLS_TLS ,
424
- #[ cfg( not( feature = "reqwest-rustls-tls" ) ) ]
425
- TlsBackend :: Rustls => {
426
- return Err ( DownloadError :: BackendUnavailable ( "reqwest rustls" ) ) ;
427
- }
428
- #[ cfg( feature = "reqwest-native-tls" ) ]
429
- TlsBackend :: NativeTls => & CLIENT_DEFAULT_TLS ,
430
- #[ cfg( not( feature = "reqwest-native-tls" ) ) ]
431
- TlsBackend :: NativeTls => {
432
- return Err ( DownloadError :: BackendUnavailable ( "reqwest default TLS" ) ) ;
433
- }
434
- } ;
435
437
let mut req = client. get ( url. as_str ( ) ) ;
436
438
437
439
if resume_from != 0 {
0 commit comments