restructure and some more nonsense

This commit is contained in:
voidarclabs
2026-04-16 12:45:50 +01:00
parent fe8cb3ba8f
commit 3dde1392bb
4 changed files with 94 additions and 78 deletions

View File

@@ -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<String, Error> {
let response = get(url)?;
let body = response.text()?;
Ok(body)
}
fn aur(args: &Vec<String>) {
struct Package {
name: String,
dependancies: Vec<String>,
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<Value> = package_info_decoded["results"].as_array().unwrap();
let deps: &Vec<Value> = results_vector[0]["Depends"].as_array().unwrap();
// Get dependancies as an actual data type
let mut dependancies: Vec<String> = 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<Value>) -> Vec<String> {
let mut output: Vec<String> = 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<String> = 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);
}
}
}

75
src/managers/aur.rs Normal file
View File

@@ -0,0 +1,75 @@
use crate::Value;
use crate::utils::request_url;
pub fn main(args: &Vec<String>) {
struct Package {
name: String,
dependancies: Vec<String>,
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<Value> = package_info_decoded["results"].as_array().unwrap();
let deps: &Vec<Value> = 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<Value>) -> Vec<String> {
let mut output: Vec<String> = vec![];
for dependancy in deps {
let dependancy_name: &str = dependancy.as_str().unwrap();
output.push(String::from(dependancy_name))
}
return output;
}
}
}

1
src/managers/mod.rs Normal file
View File

@@ -0,0 +1 @@
pub mod aur;

8
src/utils.rs Normal file
View File

@@ -0,0 +1,8 @@
use crate::Error;
use crate::get;
pub fn request_url(url: &str) -> Result<String, Error> {
let response = get(url)?;
let body = response.text()?;
Ok(body)
}