@@ -3,9 +3,9 @@ use anyhow::{anyhow, bail, Context, Result};
3
3
use bytes:: { Buf , BufMut , BytesMut } ;
4
4
use flate2:: { read:: GzDecoder , CrcReader } ;
5
5
use futures_util:: StreamExt ;
6
- use indicatif:: { ProgressBar , ProgressStyle , ProgressState } ;
7
- use reqwest:: get as async_get;
6
+ use indicatif:: { ProgressBar , ProgressState , ProgressStyle } ;
8
7
use reqwest:: blocking:: get;
8
+ use reqwest:: get as async_get;
9
9
use reqwest:: { StatusCode , Url } ;
10
10
use std:: cmp:: min;
11
11
use std:: fmt:: Write ;
@@ -119,7 +119,7 @@ fn download_install_file(
119
119
//download the package
120
120
let response = run_download ( pkg_name, & url) ?;
121
121
log:: info!( "Finished downloading package..." ) ;
122
-
122
+
123
123
//the content of the response
124
124
let mut compressed = BytesMut :: with_capacity ( response. len ( ) ) ;
125
125
compressed. put ( response. as_slice ( ) ) ;
@@ -148,20 +148,22 @@ fn download_install_file(
148
148
Ok ( ( ) )
149
149
}
150
150
151
-
152
- fn run_download ( pkg_name : & str , url : & Url ) -> Result < Vec < u8 > > {
151
+ fn run_download ( pkg_name : & str , url : & Url ) -> Result < Vec < u8 > > {
153
152
//build a single-threaded async runtime
154
- let rt = runtime:: Builder :: new_current_thread ( ) . enable_all ( ) . build ( ) . context ( "Failed to build runtime" ) ?;
153
+ let rt = runtime:: Builder :: new_current_thread ( )
154
+ . enable_all ( )
155
+ . build ( )
156
+ . context ( "Failed to build runtime" ) ?;
155
157
//run async download using the runtime
156
158
let buffer = rt. block_on ( get_package_async ( pkg_name, url) ) ?;
157
159
Ok ( buffer)
158
160
}
159
161
160
- async fn get_package_async ( pkg_name : & str , url : & Url ) -> Result < Vec < u8 > > {
162
+ async fn get_package_async ( pkg_name : & str , url : & Url ) -> Result < Vec < u8 > > {
161
163
//make get request
162
164
let response = async_get ( url. as_ref ( ) ) . await . context ( "Request failed" ) ?;
163
165
log:: info!( "Got response from {url}" ) ;
164
-
166
+
165
167
if response. status ( ) != StatusCode :: OK {
166
168
bail ! (
167
169
"Response was not okay (got code {} when requesting {})" ,
@@ -170,7 +172,9 @@ async fn get_package_async(pkg_name: &str, url: &Url) -> Result<Vec<u8>>{
170
172
)
171
173
}
172
174
173
- let content_length = response. content_length ( ) . context ( "No content length provided" ) ?;
175
+ let content_length = response
176
+ . content_length ( )
177
+ . context ( "No content length provided" ) ?;
174
178
175
179
//set up progress bar for download
176
180
let bar = ProgressBar :: new ( content_length) ;
@@ -179,13 +183,13 @@ async fn get_package_async(pkg_name: &str, url: &Url) -> Result<Vec<u8>>{
179
183
. with_key ( "eta" , |state : & ProgressState , w : & mut dyn Write | write ! ( w, "{:.1}s" , state. eta( ) . as_secs_f64( ) ) . unwrap ( ) )
180
184
. progress_chars ( "=>-" ) ) ;
181
185
bar. set_message ( format ! ( "Downloading {}" , pkg_name) ) ;
182
-
186
+
183
187
//read response body into buffer
184
188
let mut downloaded: u64 = 0 ;
185
189
let mut buffer: Vec < u8 > = vec ! [ ] ;
186
190
let mut stream = response. bytes_stream ( ) ;
187
-
188
- while let Some ( item) = stream. next ( ) . await {
191
+
192
+ while let Some ( item) = stream. next ( ) . await {
189
193
let chunk = item. context ( "Error while downloading package" ) ?;
190
194
buffer. extend_from_slice ( & chunk) ;
191
195
let new = min ( downloaded + ( chunk. len ( ) as u64 ) , content_length) ;
@@ -195,7 +199,6 @@ async fn get_package_async(pkg_name: &str, url: &Url) -> Result<Vec<u8>>{
195
199
196
200
bar. finish_with_message ( "Download complete, unpacking..." ) ;
197
201
Ok ( buffer)
198
-
199
202
}
200
203
201
204
fn run_install_script ( path : & Path ) -> Result < ( ) > {
0 commit comments