more sane error handling with thiserror
This commit is contained in:
39
src/main.rs
39
src/main.rs
@@ -1,6 +1,7 @@
|
||||
use reqwest_middleware::{ClientBuilder, ClientWithMiddleware};
|
||||
use reqwest_retry::{policies::ExponentialBackoff, RetryTransientMiddleware};
|
||||
use response_deserializer::{ChapterImages, SearchResult};
|
||||
use error::{ChapterImageError, ChapterImagesError};
|
||||
use std::fs::File;
|
||||
use std::io::Write;
|
||||
use std::path::Path;
|
||||
@@ -12,6 +13,8 @@ mod response_deserializer;
|
||||
mod select;
|
||||
mod test;
|
||||
mod util;
|
||||
mod error;
|
||||
mod client;
|
||||
|
||||
use response_deserializer::{Chapter, Id};
|
||||
use select::Entry;
|
||||
@@ -34,7 +37,7 @@ async fn main() {
|
||||
let client = &client;
|
||||
let filters = [
|
||||
// ("publicationDemographic[]", "seinen"),
|
||||
//("status[]", "completed"),
|
||||
// ("status[]", "completed"),
|
||||
// ("contentRating[]", "suggestive"),
|
||||
];
|
||||
let limit = config.result_limit;
|
||||
@@ -179,17 +182,25 @@ async fn main() {
|
||||
let result = response_deserializer::deserialize_chapter_images(&json);
|
||||
match result {
|
||||
Ok(v) => break v,
|
||||
Err(e) => {
|
||||
if e.result != "error" {
|
||||
panic!("brotha, api gone wrong (wild)");
|
||||
}
|
||||
for error in e.errors {
|
||||
if error.status == 429 {
|
||||
println!("you sent too many requests");
|
||||
Err(e) => match e {
|
||||
ChapterImagesError::Image(i) => match i {
|
||||
ChapterImageError::Result(s) => {
|
||||
eprintln!("chapter image error: {s}");
|
||||
std::process::exit(1);
|
||||
}
|
||||
},
|
||||
ChapterImagesError::Content(e) => {
|
||||
if e.result != "error" {
|
||||
panic!("brotha, api gone wrong (wild)");
|
||||
}
|
||||
for error in e.errors {
|
||||
if error.status == 429 {
|
||||
eprintln!("you sent too many requests");
|
||||
}
|
||||
std::thread::sleep(std::time::Duration::from_millis(20000));
|
||||
}
|
||||
std::thread::sleep(std::time::Duration::from_millis(20000));
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
};
|
||||
println!(
|
||||
@@ -350,7 +361,7 @@ async fn get_chapters(client: &Client, id: &Id) -> Result<Vec<Chapter>, reqwest_
|
||||
let params = [("limit", limit.as_str()), ("translatedLanguage[]", "en")];
|
||||
let url = format!("{BASE}/manga/{id}/feed");
|
||||
let json = client.get(url).query(¶ms).send().await?.text().await?;
|
||||
let mut result = response_deserializer::deserialize_chapter_feed(&json);
|
||||
let mut result = response_deserializer::deserialize_chapter_feed(&json).unwrap();
|
||||
|
||||
let mut total_chapters_received = result.limit;
|
||||
while total_chapters_received < result.total {
|
||||
@@ -362,7 +373,7 @@ async fn get_chapters(client: &Client, id: &Id) -> Result<Vec<Chapter>, reqwest_
|
||||
];
|
||||
let url = format!("{BASE}/manga/{id}/feed");
|
||||
let json = client.get(url).query(¶ms).send().await?.text().await?;
|
||||
let mut new_result = response_deserializer::deserialize_chapter_feed(&json);
|
||||
let mut new_result = response_deserializer::deserialize_chapter_feed(&json).unwrap();
|
||||
result.data.append(&mut new_result.data);
|
||||
total_chapters_received += result.limit;
|
||||
}
|
||||
@@ -391,7 +402,7 @@ async fn search(
|
||||
.text()
|
||||
.await
|
||||
.unwrap();
|
||||
response_deserializer::deserializer(&json)
|
||||
response_deserializer::deserializer(&json).unwrap()
|
||||
}
|
||||
|
||||
async fn select_manga_from_search(
|
||||
@@ -473,5 +484,5 @@ async fn id_query_get_info(client: &Client, id: &Id) -> response_deserializer::I
|
||||
.text()
|
||||
.await
|
||||
.unwrap();
|
||||
response_deserializer::deserialize_id_query(&json)
|
||||
response_deserializer::deserialize_id_query(&json).unwrap()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user