use crate::api; use crate::utils; use crate::structs; use std::env; use std::process::exit; use tokio::task::JoinHandle; extern crate tokio; extern crate reqwest; pub async fn run(args: env::Args) { let sauces = utils::get_arg_sauces(args).unwrap(); if sauces.len() < 1 { eprintln!("Missing sauce(s)"); exit(1); } let client = reqwest::Client::new(); let mut handles: Vec> = Vec::with_capacity(sauces.len()); for sauce in sauces { let cloned_client = client.clone(); handles.push(tokio::spawn(async move { (api::get_sauce_info(cloned_client, sauce).await.unwrap(), sauce) })); } let mut fail = false; let mut one_done = false; for handle in handles { let (sauce_info, sauce) = handle.await.unwrap(); match sauce_info { structs::GalleryInfo::Info(sauce_info) => { if one_done { println!(""); } println!("{}", &sauce_info); }, structs::GalleryInfo::Error(sauce_error) => { if one_done { eprintln!(""); } eprintln!("Sauce: {}\nError: {}", sauce, sauce_error.error); fail = true; } }; one_done = true; } if fail { exit(1); } }