use crate::{
types::{
ApiResponse,
UserData,
},
Error,
};
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct Client {
pub client: reqwest::Client,
}
impl Client {
pub fn new() -> Self {
let client = reqwest::Client::builder()
.connect_timeout(Duration::from_secs(10))
.build()
.expect("failed to build client");
Client { client }
}
pub async fn search(&self, name: &str) -> Result<Vec<UserData>, Error> {
let url = format!("https://r6stats.com/api/player-search/{name}/pc");
let text = self.client.get(&url).send().await?.text().await?;
let response: ApiResponse<Vec<UserData>> = serde_json::from_str(&text)?;
Ok(response.data)
}
}
impl Default for Client {
fn default() -> Self {
Client::new()
}
}
#[cfg(test)]
mod test {
use super::*;
#[tokio::test]
#[ignore]
async fn it_works() {
let client = Client::new();
let user_list = client.search("KingGeorge").await.unwrap();
assert!(!user_list.is_empty());
dbg!(&user_list);
}
#[tokio::test]
#[ignore]
async fn invalid_search() {
let client = Client::new();
let user_list = client.search("ygwdauiwgd").await.unwrap();
assert!(user_list.is_empty());
dbg!(&user_list);
}
}