use Configuration;
use EntityType;
#[derive(Debug)]
pub struct EntityQuery {
ids: Vec<String>,
lang: String,
}
#[derive(Debug)]
pub struct SearchQuery {
query: String,
lang: String,
search_lang: String,
limit: u64,
entity_type: EntityType,
}
impl EntityQuery {
pub fn new<S: Into<String>>(ids: Vec<String>, lang: S) -> EntityQuery {
Self {
ids,
lang: lang.into(),
}
}
pub fn ids(&self) -> &[String] {
&self.ids
}
pub fn lang(&self) -> &str {
&self.lang
}
pub fn url(&self, configuration: &Configuration) -> String {
encode_url(&format!("{}?action=wbgetentities&ids={}&languages={}&uselang={}&format=json",
configuration.api_url(),
self.ids_piped(),
&self.lang,
&self.lang))
}
fn ids_piped(&self) -> String {
self.ids().join("|")
}
}
impl SearchQuery {
pub fn new<S: Into<String>>(query: S, lang: S, search_lang: S, limit: u64,
entity_type: EntityType) -> SearchQuery {
Self {
query: query.into(),
lang: lang.into(),
search_lang: search_lang.into(),
limit,
entity_type,
}
}
pub fn entity_type(&self) -> &EntityType {
&self.entity_type
}
pub fn lang(&self) -> &str {
&self.lang
}
pub fn limit(&self) -> &u64 {
&self.limit
}
pub fn query(&self) -> &str {
&self.query
}
pub fn search_lang(&self) -> &str {
&self.search_lang
}
pub fn url(&self, configuration: &Configuration) -> String {
encode_url(&format!("{}?action=wbsearchentities&search={}&language={}&limit={}&type={}&uselang={}&format=json",
configuration.api_url(),
&self.query,
&self.search_lang,
&self.limit,
&self.entity_type.string_value(),
&self.lang))
}
}
fn encode_url(url: &str) -> String {
str::replace(&url, " ", "%20")
}