Last active
July 13, 2025 13:56
-
-
Save giuliano-macedo/4d11d6b3bb003dba3a1b53f43d81b30d to your computer and use it in GitHub Desktop.
Revisions
-
giuliano-macedo revised this gist
Feb 10, 2022 . 1 changed file with 1 addition and 1 deletion.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -35,7 +35,7 @@ pub async fn download_file(client: &Client, url: &str, path: &str) -> Result<(), while let Some(item) = stream.next().await { let chunk = item.or(Err(format!("Error while downloading file")))?; file.write_all(&chunk) .or(Err(format!("Error while writing to file")))?; let new = min(downloaded + (chunk.len() as u64), total_size); downloaded = new; -
giuliano-macedo revised this gist
Apr 21, 2021 . 1 changed file with 2 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -6,11 +6,11 @@ use std::cmp::min; use std::fs::File; use std::io::Write; use reqwest::Client; use indicatif::{ProgressBar, ProgressStyle}; use futures_util::StreamExt; pub async fn download_file(client: &Client, url: &str, path: &str) -> Result<(), String> { // Reqwest setup let res = client .get(url) -
giuliano-macedo revised this gist
Apr 21, 2021 . 1 changed file with 4 additions and 0 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,3 +1,7 @@ // you need this in your cargo.toml // reqwest = { version = "0.11.3", features = ["stream"] } // futures-util = "0.3.14" // indicatif = "0.15.0" use std::cmp::min; use std::fs::File; use std::io::Write; -
giuliano-macedo revised this gist
Apr 21, 2021 . No changes.There are no files selected for viewing
-
giuliano-macedo created this gist
Apr 21, 2021 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,43 @@ use std::cmp::min; use std::fs::File; use std::io::Write; use indicatif::{ProgressBar, ProgressStyle}; use futures_util::StreamExt; pub async fn download_file(client: &reqwest::Client, url: &str, path: &str) -> Result<(), String> { // Reqwest setup let res = client .get(url) .send() .await .or(Err(format!("Failed to GET from '{}'", &url)))?; let total_size = res .content_length() .ok_or(format!("Failed to get content length from '{}'", &url))?; // Indicatif setup let pb = ProgressBar::new(total_size); pb.set_style(ProgressStyle::default_bar() .template("{msg}\n{spinner:.green} [{elapsed_precise}] [{wide_bar:.cyan/blue}] {bytes}/{total_bytes} ({bytes_per_sec}, {eta})") .progress_chars("#>-")); pb.set_message(&format!("Downloading {}", url)); // download chunks let mut file = File::create(path).or(Err(format!("Failed to create file '{}'", path)))?; let mut downloaded: u64 = 0; let mut stream = res.bytes_stream(); while let Some(item) = stream.next().await { let chunk = item.or(Err(format!("Error while downloading file")))?; file.write(&chunk) .or(Err(format!("Error while writing to file")))?; let new = min(downloaded + (chunk.len() as u64), total_size); downloaded = new; pb.set_position(new); } pb.finish_with_message(&format!("Downloaded {} to {}", url, path)); return Ok(()); }