use crate::args::{Args, Command}; use pkgfile::PKGFile; use std::env; use std::env::temp_dir; use std::fs::{create_dir, create_dir_all, File}; use std::io::Write; use std::path::PathBuf; use std::process::exit; use uuid::Uuid; mod args; mod prelude; fn main() { let args = Args::from(env::args().collect::>()[1..].to_owned()); match args.command { Command::Strap => { if args.args.len() == 0 { println!("no path/uri"); exit(0); } let uri = &args.args[0]; println!("!! Got package: \"{}\"", uri); let re = r"[A-z]+://.+"; let data = if regex::Regex::new(re).unwrap().is_match(uri) { println!("** detected uri."); reqwest::blocking::get(uri) .expect("Could not request file.") .bytes() .expect("Could not turn file into bytes.") .to_vec() } else { if let Ok(d) = std::fs::read(uri) { d } else { println!("Could not read file!"); exit(1); } }; let pkg = match PKGFile::try_from(data) { Ok(p) => p, Err(_) => { println!("!! Could not interpret PKGFile..."); exit(1); } }; let mani = prelude::mani_from_str(&pkg.manifest); println!("!! Package: {}", &mani.package.name); if !mani.valid() { println!("!!! Manifest is not valid."); exit(1); } let mut tmp_dir = temp_dir(); tmp_dir.push(format!("{}", Uuid::new_v4())); create_dir_all(&tmp_dir) .expect("Could not create tmp dir."); { let mut file = File::create(format!("{}/pkgtar", tmp_dir.to_str().unwrap())) .expect("Could not create tmp pkgtar file"); file.write(&pkg.data) .expect("Could not write pkgtar to tmp file"); } // TODO: untar // TODO: cd into pkg // TODO: run bootstrap commands } Command::Unpack => {} _ => { println!("Unsupported command, allowed commands: strap/unpack."); exit(1); } } }