use serde::{Deserialize, Serialize};
use crate::{directory::DirectoryKind, DynastyReaderRoute, DYNASTY_READER_BASE};
#[allow(missing_docs)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SearchSuggestionConfig {
pub query: String,
}
impl From<String> for SearchSuggestionConfig {
fn from(s: String) -> Self {
SearchSuggestionConfig { query: s }
}
}
impl DynastyReaderRoute for SearchSuggestionConfig {
fn request_builder(
&self,
client: &reqwest::Client,
url: reqwest::Url,
) -> reqwest::RequestBuilder {
client.post(url).form(&[("query", &self.query)])
}
fn request_url(&self) -> reqwest::Url {
DYNASTY_READER_BASE.join("tags/suggest").unwrap()
}
}
#[allow(missing_docs)]
#[derive(Debug, Clone, PartialEq, Eq, Deserialize, Serialize)]
pub struct SearchSuggestion {
pub id: u64,
pub name: String,
#[serde(alias = "type")]
pub kind: DirectoryKind,
}
#[cfg(test)]
mod tests {
use anyhow::Result;
use crate::test_utils::tryhard_configs;
#[tokio::test]
#[ignore = "requires internet"]
async fn response_structure() -> Result<()> {
let configs = ["hin", "nio", "yagat", "ayano", "scum"].map(|s| s.to_string().into());
tryhard_configs(configs, |client, config| client.search_suggestions(config)).await?;
Ok(())
}
}