use std::collections::BTreeMap;
use crate::{
client::Client,
error::Error,
models::user::{UserFriends, UserGetFriendsResponse, UserGetInfoResponse, UserInfo},
};
pub trait UserEndpointExt {
fn user(&self) -> UserHandler<'_>;
}
impl UserEndpointExt for Client {
fn user(&self) -> UserHandler<'_> {
UserHandler { client: self }
}
}
#[derive(Debug)]
pub struct UserHandler<'a> {
pub(crate) client: &'a Client,
}
impl<'a> UserHandler<'a> {
pub async fn get_info(&self, username: &str) -> Result<UserInfo, Error> {
let mut params = BTreeMap::new();
params.insert("user".into(), username.to_string());
let response: UserGetInfoResponse =
self.client.unsigned_get("user.getInfo", params).await?;
Ok(response.user)
}
pub async fn get_friends(&self, username: &str) -> Result<UserFriends, Error> {
let mut params = BTreeMap::new();
params.insert("user".into(), username.to_string());
let response: UserGetFriendsResponse =
self.client.unsigned_get("user.getFriends", params).await?;
Ok(response.friends)
}
}