siwi-download

Crates.iosiwi-download
lib.rssiwi-download
version0.2.5
sourcesrc
created_at2021-02-18 07:08:44.315447
updated_at2024-11-04 10:56:41.313393
descriptionasync download file
homepage
repositoryhttps://github.com/rs-videos/siwi-download.git
max_upload_size
id356934
size54,274
SiwiLiZhao (siwilizhao)

documentation

https://docs.rs/siwi-download

README

Siwi Download

Download file

Crates.io version License Download docs.rs docs github actions

API Docs

Siwi Download is a downloader build on tokio and reqwest.

Example

cargo run --example download

use reqwest::header::{HeaderMap, HeaderValue, USER_AGENT};
use siwi_download::{
  download::{Download, DownloadOptions},
  error::AnyResult,
};
use tracing::Level;
use tracing_subscriber::FmtSubscriber;

#[tokio::main]
async fn main() -> AnyResult<()> {
  let subscriber = FmtSubscriber::builder()
    .with_max_level(Level::INFO)
    .finish();
  tracing::subscriber::set_global_default(subscriber).expect("setting default subscriber failed");
  let url = "https://nodejs.org/dist/v22.11.0/node-v22.11.0.pkg";
  let mut storage_path = std::env::current_dir()?;
  storage_path.push("storage");
  let storage_path = storage_path.to_str().unwrap();
  let mut options = DownloadOptions::default();
  let mut headers = HeaderMap::new();
  headers.insert(USER_AGENT, HeaderValue::from_str("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36")?);
  options
    .set_headers(headers)
    .set_file_name("node-v22.11.0.pkg")
    .set_show_progress(true);

  let download = Download::new(storage_path);
  download.auto_create_storage_path().await?;

  let report = download.download(url, options).await?;
  println!("report {:#?}", report);
  Ok(())
}
  • Write a CLI tool
use siwi_download::download::Download;
use siwi_download::download::DownloadOptions;
use siwi_download::error::AnyResult;
#[tokio::main]
async fn main() -> AnyResult<()> {
  let args: Vec<String> = std::env::args().collect();
  let storage_path = std::env::current_dir()?;
  let storage_path = storage_path.to_str().unwrap_or("");

  if let Some(url) = args.get(1) {
    let mut options = DownloadOptions::default();
    options.set_show_progress(true);
    let download = Download::new(storage_path);
    let report = download.download(url, options).await?;
    println!("{:?}", report);
  }
  Ok(())
}

Commit count: 36

cargo fmt