use crate::structs; use std::env; use std::fs::File; use std::io::Write; use tokio_stream::StreamExt; extern crate serde_json; extern crate reqwest; pub async fn get_sauce_info(client: reqwest::Client, sauce: i32) -> Result { let mut uri = String::from("https://nhentai.net/api/gallery/"); uri.push_str(&sauce.to_string()); let resp = client.get(&uri) .send() .await?; Ok(serde_json::from_str(&resp.text().await?).unwrap()) } pub async fn get_search_info(client: reqwest::Client, search_query: &str) -> Result { let uri = "https://nhentai.net/api/galleries/search"; let resp = client.get(uri) .query(&[("query", search_query)]) .send() .await?; Ok(serde_json::from_str(&resp.text().await?).unwrap()) } pub async fn download_file(client: reqwest::Client, url: &str, file_name: &str) -> Result<(), reqwest::Error> { let resp = client.get(url) .send() .await?; let mut file = File::create(&file_name).unwrap(); let mut stream = resp.bytes_stream(); while let Some(item) = stream.next().await { file.write(&item?).unwrap(); } Ok(()) } pub fn get_arg_sauces(args: env::Args) -> Result, String> { let mut sauces: Vec = Vec::new(); for sauce in args { let sauce: i32 = match sauce.parse() { Ok(sauce) => sauce, Err(_) => { return Err(format!("{} is not a number/sauce", sauce)); } }; if !sauces.contains(&sauce) { sauces.push(sauce); } } Ok(sauces) }