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