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 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}