From fe8cb3ba8f9e7b7710dbddd3613e75b97962d071 Mon Sep 17 00:00:00 2001 From: voidarc Date: Sun, 5 Apr 2026 15:57:58 +0100 Subject: [PATCH] some flake things among other stuff --- flake.nix | 13 ++++---- src/main.rs | 92 ++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 81 insertions(+), 24 deletions(-) diff --git a/flake.nix b/flake.nix index baf7184..2c841ec 100644 --- a/flake.nix +++ b/flake.nix @@ -19,6 +19,7 @@ in { devShells.default = pkgs.mkShell { + name = "flake-rustshell"; buildInputs = with pkgs; [ # Rust toolchain rustc @@ -34,13 +35,13 @@ # Environment variables shellHook = '' - export RUST_BACKTRACE=1 - echo "🦀 Rust Dev Environment Loaded" + export RUST_BACKTRACE=full + export DEVSHELL_NAME="󱄅 flake/#89dceb|🦀 rustproject/red" - # Trigger zsh if not already in it - if [[ -z "$ZSH_VERSION" ]]; then - exec zsh - fi + # Trigger zsh if not already in it + if [[ -z "$ZSH_VERSION" ]]; then + exec zsh + fi ''; }; } diff --git a/src/main.rs b/src/main.rs index edbebb4..245ea1b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,34 +1,90 @@ use reqwest::Error; use reqwest::blocking::get; +use serde_json::Value; use std::env; fn request_url(url: &str) -> Result { - dbg!(url); 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(); - // Check length of arguments - let args_length = args.len(); + let manager: &String = &args[1].to_string(); - if &args[1] == "aur" { - if args_length < 3 { - println!("no package specified") - } else { - let package: &String = &args[2]; - let url: String = format!("https://aur.archlinux.org/rpc/v5/info/{}", package); - - let package_info = match request_url(&url) { - Ok(s) => s, - Err(e) => panic!("shit... {e:?}"), - }; - - println!("something {}", &package_info) - } - }; + if manager == "aur" { + aur(&args); + } }