restructure and some more nonsense
This commit is contained in:
88
src/main.rs
88
src/main.rs
@@ -1,90 +1,22 @@
|
|||||||
|
mod managers;
|
||||||
|
mod utils;
|
||||||
|
|
||||||
use reqwest::Error;
|
use reqwest::Error;
|
||||||
use reqwest::blocking::get;
|
use reqwest::blocking::get;
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use std::env;
|
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() {
|
fn main() {
|
||||||
// Get arguments from commandline
|
// Get arguments from commandline
|
||||||
let args: Vec<String> = env::args().collect();
|
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" {
|
if manager == "aur" {
|
||||||
aur(&args);
|
crate::managers::aur::main(&args);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
75
src/managers/aur.rs
Normal file
75
src/managers/aur.rs
Normal 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
1
src/managers/mod.rs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
pub mod aur;
|
||||||
8
src/utils.rs
Normal file
8
src/utils.rs
Normal 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)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user