Skip to main content

itchio_api/
users.rs

1use serde::Deserialize;
2use url::Url;
3
4use crate::{Itchio, ItchioError};
5
6#[derive(Clone, Debug, Deserialize)]
7struct WrappedUser {
8  user: User
9}
10
11#[derive(Clone, Debug, Deserialize)] #[allow(dead_code)]
12pub struct User {
13  id: u32,
14  username: String,
15  display_name: Option<String>,
16  url: Url,
17  cover_url: Option<Url>,
18}
19
20impl Itchio {
21  /// Using a user_id, get some information about a User.
22  pub async fn get_user(&self, user: u32) -> Result<User, ItchioError> {
23    let endpoint = format!("users/{}", user);
24    let response = self.request::<WrappedUser>(endpoint).await?;
25    Ok(response.user)
26  }
27}
28
29#[cfg(test)]
30mod tests {
31  use super::*;
32  use std::env;
33  use dotenv::dotenv;
34
35  #[tokio::test]
36  async fn good() {
37    dotenv().ok();
38    let client_secret = env::var("KEY").expect("KEY has to be set");
39    let api = Itchio::new(client_secret);
40    let user = api.get_user(5771143).await.inspect_err(|err| eprintln!("Error spotted: {}", err));
41    assert!(user.is_ok())
42  }
43
44  #[tokio::test]
45  async fn bad_user() {
46    dotenv().ok();
47    let client_secret = env::var("KEY").expect("KEY has to be set");
48    let api = Itchio::new(client_secret);
49    let user = api.get_user(0).await;
50    assert!(user.is_err_and(|err| matches!(err, ItchioError::NotFound)))
51  }
52
53  #[tokio::test]
54  async fn bad_key() {
55    let api = Itchio::new("bad_key".to_string());
56    let user = api.get_user(5771143).await;
57    assert!(user.is_err_and(|err| matches!(err, ItchioError::BadKey)))
58  }
59}