diff --git a/src/api.rs b/src/api.rs new file mode 100644 index 0000000..c63fc17 --- /dev/null +++ b/src/api.rs @@ -0,0 +1,21 @@ +use crate::structs; + +extern crate serde_json; + +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()) +} diff --git a/src/commands/download.rs b/src/commands/download.rs index 4578699..9f93c50 100644 --- a/src/commands/download.rs +++ b/src/commands/download.rs @@ -1,3 +1,4 @@ +use crate::api; use crate::utils; use crate::structs; @@ -29,7 +30,7 @@ pub async fn run(args: env::Args) { for sauce in sauces { let cloned_client = client.clone(); handles.push(tokio::spawn(async move { - match utils::get_sauce_info(cloned_client, sauce).await.unwrap() { + match api::get_sauce_info(cloned_client, sauce).await.unwrap() { structs::GalleryInfo::Info(sauce_info) => sauce_info, structs::GalleryInfo::Error(sauce_error) => panic!("{} returned: {}", sauce, sauce_error.error) } diff --git a/src/commands/search.rs b/src/commands/search.rs index 42ec25c..240d13e 100644 --- a/src/commands/search.rs +++ b/src/commands/search.rs @@ -1,4 +1,4 @@ -use crate::utils; +use crate::api; use std::env; use std::process::exit; @@ -14,7 +14,7 @@ pub async fn run(args: env::Args) { eprintln!("Missing search query"); exit(1); } - let search_info = utils::get_search_info(reqwest::Client::new(), &query).await.unwrap(); + let search_info = api::get_search_info(reqwest::Client::new(), &query).await.unwrap(); if search_info.num_pages < 1 { eprintln!("No results found"); exit(1); diff --git a/src/commands/view.rs b/src/commands/view.rs index 95e3b47..f5dd228 100644 --- a/src/commands/view.rs +++ b/src/commands/view.rs @@ -1,3 +1,4 @@ +use crate::api; use crate::utils; use crate::structs; @@ -18,7 +19,7 @@ pub async fn run(args: env::Args) { for sauce in sauces { let cloned_client = client.clone(); handles.push(tokio::spawn(async move { - (utils::get_sauce_info(cloned_client, sauce).await.unwrap(), sauce) + (api::get_sauce_info(cloned_client, sauce).await.unwrap(), sauce) })); } let mut fail = false; diff --git a/src/main.rs b/src/main.rs index e24bf9a..1ca9975 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,4 @@ +mod api; mod utils; mod structs; mod commands; diff --git a/src/utils.rs b/src/utils.rs index d5c40f8..91defeb 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,29 +1,8 @@ -use crate::structs; - use std::env; use std::fs::File; use std::io::Write; -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 { let resp = client.get(url) .send()