use crate::client::WattpadRequestBuilder;
use crate::field::{StoryField, UserField};
use crate::types::{StoryResponse, UserResponse, UserStoriesResponse};
use crate::WattpadError;
use std::sync::atomic::AtomicBool;
use std::sync::Arc;
use crate::pagination::Paginator;
pub struct UserClient {
pub(crate) http: reqwest::Client,
pub(crate) is_authenticated: Arc<AtomicBool>,
}
impl UserClient {
pub async fn get_user_info(
&self,
username: &str,
fields: Option<&[UserField]>,
) -> Result<UserResponse, WattpadError> {
WattpadRequestBuilder::new(
&self.http,
&self.is_authenticated,
reqwest::Method::GET,
&format!("/api/v3/users/{}", username),
)
.fields(fields, None)?
.execute()
.await
}
pub fn get_user_stories<'a>(
&'a self,
username: &'a str,
fields: Option<&'a [StoryField]>,
) -> Result<Paginator<'a, StoryResponse, UserStoriesResponse>, WattpadError> {
let req = WattpadRequestBuilder::new(
&self.http,
&self.is_authenticated,
reqwest::Method::GET,
&format!("/api/v3/users/{}/stories", username),
)
.fields(fields, Some("stories"))?;
Ok(Paginator::new(req))
}
}