From 2b936652dd4190e5eef4a2f513b8119ddcf6b120 Mon Sep 17 00:00:00 2001 From: Anna Date: Wed, 5 Sep 2018 09:29:20 -0400 Subject: [PATCH] fix: handle no results --- src/logic/search.rs | 9 +++++++++ src/logic/search/character.rs | 7 +++++++ src/logic/search/free_company.rs | 7 +++++++ src/models/search.rs | 2 +- 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/logic/search.rs b/src/logic/search.rs index ae53f14..88799a4 100644 --- a/src/logic/search.rs +++ b/src/logic/search.rs @@ -16,6 +16,8 @@ pub use self::{ selectors!( PAGINATION_TOTAL => ".parts__total"; PAGINATION_PAGES => ".btn__pager__current"; + + NO_RESULTS => "p.parts__zero"; ); crate fn parse_pagination(html: &Html) -> Result { @@ -48,3 +50,10 @@ crate fn parse_pagination(html: &Html) -> Result { total_results, }) } + +crate fn parse_no_results<'a>(html: &Html) -> bool { + html.select(&*NO_RESULTS) + .next() + .map(|x| x.text().collect::() == "Your search yielded no results.") + .unwrap_or(false) +} diff --git a/src/logic/search/character.rs b/src/logic/search/character.rs index 2595621..222ee6d 100644 --- a/src/logic/search/character.rs +++ b/src/logic/search/character.rs @@ -32,6 +32,13 @@ selectors!( pub fn parse(html: &str) -> Result> { let html = Html::parse_document(html); + if crate::logic::search::parse_no_results(&html) { + return Ok(Paginated { + pagination: Default::default(), + results: Default::default(), + }); + } + let pagination = crate::logic::search::parse_pagination(&html)?; let results: Vec = html diff --git a/src/logic/search/free_company.rs b/src/logic/search/free_company.rs index 1bca58d..3c49049 100644 --- a/src/logic/search/free_company.rs +++ b/src/logic/search/free_company.rs @@ -38,6 +38,13 @@ selectors!( pub fn parse(s: &str) -> Result> { let html = Html::parse_document(s); + if crate::logic::search::parse_no_results(&html) { + return Ok(Paginated { + pagination: Default::default(), + results: Default::default(), + }); + } + let pagination = crate::logic::search::parse_pagination(&html)?; let results: Vec = html diff --git a/src/models/search.rs b/src/models/search.rs index 0c5bfac..c70c678 100644 --- a/src/models/search.rs +++ b/src/models/search.rs @@ -1,7 +1,7 @@ pub mod character; pub mod free_company; -#[derive(Debug, Serialize, Deserialize)] +#[derive(Debug, Default, Serialize, Deserialize)] pub struct Pagination { pub current_page: u64, pub total_pages: u64,