use std::fs::File; use std::path::Path; use reqwest::Client; use reqwest::header::ETAG; use smush::decode; fn main() -> Result<(), std::io::Error> { let client = Client::new(); let args: Vec<_> = std::env::args().collect(); if args.len() < 2 { println!("Please enter a package name..."); } let split = args[1].as_str().split("::"); let vec: Vec<&str> = split.collect(); println!("Downloading {}", vec[0]); if !Path::new(format!("/usr/pack/repo/{}", vec[1]).as_str()).exists() { println!("Path /usr/pack/repo/{} does not exist. Please setup your environment.", vec[1]); std::process::exit(1); } print!("Making request..."); let mut resp = client.get(vec[0]) .send().expect("Failed to make request"); if resp.status().is_success() { println!("OK"); if let Some(etag) = resp.headers().get(ETAG) { std::fs::write("etag", etag.as_bytes()).expect("Failed to write ETAG..."); } let mut file = match File::create(format!("/usr/pack/{}/tarballs/bash.pkg.tar.xz", vec[1])) { Ok(res) => res, Err(_) => { println!("Failed to create file...did you setup arch? Do you have permission to create files?"); std::process::exit(1); } }; resp.copy_to(&mut file).expect("failed to write file"); } else { println!("FAIL!"); std::process::exit(1); } let archive = File::open(format!("/usr/pack/repo/{}/tarballs/bash.pkg.tar.xz")).expect("Failed to open tar..."); let mut tar = Vec::new(); archive.read_to_end(&mut tar).expect("Failed to read tar..."); Ok(()) }