use crate::commands::*; use serde::Deserialize; use serenity::model::channel::Message; use std::fmt; pub fn query_pacman(ctx: Context, msg: Message, args: Vec<&str>) { if args.len() == 1 { // try by full package name let response: Response = search( &format!( "https://www.archlinux.org/packages/search/json/?name={}", &args[0] ), |_e| EMPTY_RESULT, ); // this is 1 for most packages and 2 if there’s a second version in testing if response.results.len() != 0 { respond_with_results(msg.channel_id, &response.results, &ctx); return; } } let query = args.join(" "); let response: Response = search( &format!( "https://www.archlinux.org/packages/search/json/?q={}", &query ), |_e| EMPTY_RESULT, ); if response.results.is_empty() { send(msg.channel_id, "No results", &ctx); return; } respond_with_results(msg.channel_id, &response.results, &ctx); } const EMPTY_RESULT: Response = Response { results: Vec::new(), }; #[derive(Deserialize)] struct Response { results: Vec, } #[derive(Deserialize)] struct Package { pkgname: String, //pkgbase: String, repo: String, pkgver: String, pkgdesc: String, //url: String, //compressed_size: i64, //installed_size: i64, //build_date: String, //last_update: String, //flag_date: Option, } impl fmt::Display for Package { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!( f, "{}/{} {}\n {}", self.repo, self.pkgname, self.pkgver, self.pkgdesc ) } }