From 3dde1392bb00d0edf226fa6c60db1d6b60fab86f Mon Sep 17 00:00:00 2001 From: voidarclabs Date: Thu, 16 Apr 2026 12:45:50 +0100 Subject: [PATCH] restructure and some more nonsense --- src/main.rs | 88 ++++++--------------------------------------- src/managers/aur.rs | 75 ++++++++++++++++++++++++++++++++++++++ src/managers/mod.rs | 1 + src/utils.rs | 8 +++++ 4 files changed, 94 insertions(+), 78 deletions(-) create mode 100644 src/managers/aur.rs create mode 100644 src/managers/mod.rs create mode 100644 src/utils.rs diff --git a/src/main.rs b/src/main.rs index 245ea1b..f965b98 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,90 +1,22 @@ +mod managers; +mod utils; + use reqwest::Error; use reqwest::blocking::get; use serde_json::Value; use std::env; -fn request_url(url: &str) -> Result { - let response = get(url)?; - let body = response.text()?; - Ok(body) -} - -fn aur(args: &Vec) { - struct Package { - name: String, - dependancies: Vec, - parent: String, - } - // Check length of arguments - let args_length = args.len(); - - if args_length < 3 { - // If there is no third param, return - println!("no package specified") - } else { - // get package and package api url - let package: &str = args[2].as_str(); - let url: String = make_url(package); - - // Get json returned from api - let package_info: String = match request_url(&url) { - Ok(s) => s, - Err(e) => panic!("shit... {e:?}"), - }; - - // Decode into ""usable"" data - let package_info_decoded: Value = serde_json::from_str(&package_info).unwrap(); - - // check if the package exists - let resultcount: i64 = package_info_decoded["resultcount"].as_i64().unwrap(); - if resultcount > 0 { - // Nice user facing nonsense - println!("package {} found", &package); - - // Get dependancies as a weird value type - let results_vector: &Vec = package_info_decoded["results"].as_array().unwrap(); - let deps: &Vec = results_vector[0]["Depends"].as_array().unwrap(); - - // Get dependancies as an actual data type - let mut dependancies: Vec = get_deps(deps); - - let deps_tree_traversed: bool = false; - - while deps_tree_traversed == false { - for dependancy in &dependancies { - make_url(&dependancy); - } - } - } else { - // If there are no results - println!("No such package") - } - - fn get_pkg_info(package: &str) -> Value {} - - fn make_url(package: &str) -> String { - let url: String = format!("https://aur.archlinux.org/rpc/v5/info/{}", package); - return url; - } - - fn get_deps(deps: &Vec) -> Vec { - let mut output: Vec = vec![]; - for dependancy in deps { - let dependancy_name: &str = dependancy.as_str().unwrap(); - output.push(String::from(dependancy_name)) - } - return output; - } - } -} - fn main() { // Get arguments from commandline let args: Vec = env::args().collect(); - let manager: &String = &args[1].to_string(); + if args.len() == 1 { + println!("this would be a help page or something :)") + } else { + let manager: &String = &args[1].to_string(); - if manager == "aur" { - aur(&args); + if manager == "aur" { + crate::managers::aur::main(&args); + } } } diff --git a/src/managers/aur.rs b/src/managers/aur.rs new file mode 100644 index 0000000..97f1be7 --- /dev/null +++ b/src/managers/aur.rs @@ -0,0 +1,75 @@ +use crate::Value; +use crate::utils::request_url; + +pub fn main(args: &Vec) { + struct Package { + name: String, + dependancies: Vec, + parent: String, + } + // Check length of arguments + let args_length = args.len(); + + if args_length < 3 { + // If there is no third param, return + println!("no package specified") + } else { + // Get package as variable + let package: &str = args[2].as_str(); + + // Get package info + let package_info_decoded: Value = get_pkg_info(package); + + // Check pacakge exists + if check_package_exists(&package_info_decoded) == true { + // Nice user facing nonsense + println!("package {} found", &package); + + // Get dependancies as a weird value type + let results_vector: &Vec = package_info_decoded["results"].as_array().unwrap(); + let deps: &Vec = results_vector[0]["Depends"].as_array().unwrap(); + } else { + // If there are no results + println!("No such package") + } + + fn make_url(package: &str) -> String { + let url: String = format!("https://aur.archlinux.org/rpc/v5/info/{}", package); + return url; + } + + fn get_pkg_info(package: &str) -> Value { + // Make package url + let url: String = make_url(package); + + // Get json returned from api + let package_info: String = match request_url(&url) { + Ok(s) => s, + Err(e) => panic!("shit... {e:?}"), + }; + + // Decode into ""usable"" data + let package_info_decoded: Value = serde_json::from_str(&package_info).unwrap(); + return package_info_decoded; + } + + fn check_package_exists(package_info: &Value) -> bool { + // Check if the package exists + let resultcount: i64 = package_info["resultcount"].as_i64().unwrap(); + if resultcount > 0 { + return true; + } else { + return false; + } + } + + fn get_deps_as_string(deps: &Vec) -> Vec { + let mut output: Vec = vec![]; + for dependancy in deps { + let dependancy_name: &str = dependancy.as_str().unwrap(); + output.push(String::from(dependancy_name)) + } + return output; + } + } +} diff --git a/src/managers/mod.rs b/src/managers/mod.rs new file mode 100644 index 0000000..5f6c405 --- /dev/null +++ b/src/managers/mod.rs @@ -0,0 +1 @@ +pub mod aur; diff --git a/src/utils.rs b/src/utils.rs new file mode 100644 index 0000000..6781efc --- /dev/null +++ b/src/utils.rs @@ -0,0 +1,8 @@ +use crate::Error; +use crate::get; + +pub fn request_url(url: &str) -> Result { + let response = get(url)?; + let body = response.text()?; + Ok(body) +}