summaryrefslogtreecommitdiffstats
path: root/src/stackexchange/search.rs
diff options
context:
space:
mode:
authorSam Tay <sam.chong.tay@gmail.com>2020-06-24 11:58:34 -0700
committerSam Tay <sam.chong.tay@gmail.com>2020-06-24 11:58:34 -0700
commiteba4e14ea0420e9919379d3aba23efd95426429f (patch)
tree6a93842b345b61ef50bcaf6ab3e475590c9c6665 /src/stackexchange/search.rs
parent95f429041ee505497f36530e1895c2ea3554d37b (diff)
Refactor for future search engines
Diffstat (limited to 'src/stackexchange/search.rs')
-rw-r--r--src/stackexchange/search.rs23
1 files changed, 11 insertions, 12 deletions
diff --git a/src/stackexchange/search.rs b/src/stackexchange/search.rs
index ed89e15..530b665 100644
--- a/src/stackexchange/search.rs
+++ b/src/stackexchange/search.rs
@@ -4,14 +4,14 @@ use reqwest::header;
use reqwest::Client;
use std::collections::HashMap;
-use crate::config::Config;
+use crate::config::{Config, SearchEngine};
use crate::error::{Error, Result};
use crate::tui::markdown;
use crate::tui::markdown::Markdown;
use super::api::{Answer, Api, Question};
use super::local_storage::LocalStorage;
-use super::scraper::{ScrapedData, Scraper, SearchEngine};
+use super::scraper::{DuckDuckGo, ScrapedData, Scraper};
/// Limit on concurrent requests (gets passed to `buffer_unordered`)
const CONCURRENT_REQUESTS_LIMIT: usize = 8;
@@ -55,8 +55,9 @@ impl Search {
let original_config = self.config.clone();
// Temp set lucky config
self.config.limit = 1;
- if !self.config.duckduckgo {
- self.config.sites.truncate(1);
+ match self.config.search_engine {
+ SearchEngine::StackExchange => self.config.sites.truncate(1),
+ _ => (),
}
// Run search with temp config
let result = self.search().await;
@@ -81,17 +82,15 @@ impl Search {
/// Search using the configured search engine
pub async fn search(&self) -> Result<Vec<Question<String>>> {
- if self.config.duckduckgo {
- self.search_by_engine(SearchEngine::DuckDuckGo).await
- } else {
- // TODO after duckduck go finished, refactor to _not_ thread this limit, its unnecessary
- self.parallel_search_advanced().await
+ match self.config.search_engine {
+ SearchEngine::DuckDuckGo => self.search_by_scraper(DuckDuckGo).await,
+ SearchEngine::StackExchange => self.parallel_search_advanced().await,
}
}
/// Search query at duckduckgo and then fetch the resulting questions from SE.
- async fn search_by_engine(&self, search_engine: impl Scraper) -> Result<Vec<Question<String>>> {
- let url = search_engine.get_url(&self.query, self.sites.values());
+ async fn search_by_scraper(&self, scraper: impl Scraper) -> Result<Vec<Question<String>>> {
+ let url = scraper.get_url(&self.query, self.sites.values());
let html = Client::new()
.get(url)
.header(header::USER_AGENT, USER_AGENT)
@@ -99,7 +98,7 @@ impl Search {
.await?
.text()
.await?;
- let data = search_engine.parse(&html, &self.sites, self.config.limit)?;
+ let data = scraper.parse(&html, &self.sites, self.config.limit)?;
self.parallel_questions(data).await
}