mod search;
mod search_channel;
mod search_live;
mod search_video;
pub use search_channel::SearchChannelJson;
pub use search_live::SearchLiveJson;
pub use search_video::SearchVideoJson;
pub use search::{Search, SearchInfo, SearchType};
pub struct Client {
client: reqwest::Client,
}
impl Client {
pub fn new() -> Self {
Client {
client: reqwest::Client::new(),
}
}
pub async fn search<T: SearchInfo + serde::de::DeserializeOwned>(
&self,
search: search::Search,
) -> Result<T, String> {
let url = format!(
"{}?keyword={:?}&offset={:?}&size={:?}",
match search.search_type {
search::SearchType::Channel =>
"https://api.chzzk.naver.com/service/v1/search/channels",
search::SearchType::Video => "https://api.chzzk.naver.com/service/v1/search/videos",
search::SearchType::Live => "https://api.chzzk.naver.com/service/v1/search/lives",
},
search.keyword,
search.offset,
search.size
);
println!("{}", url);
let res = self.client.get(url).send().await;
if res.is_ok() {
let res =
serde_json::from_str(&res.unwrap().text().await.unwrap().replace("null", "\"\""));
if res.is_ok() {
return Ok(res.unwrap());
}
return Err("json parsing failed".to_string());
}
Err(format!("{:?}", res.err()))
}
}