itchio-api 0.3.0

Easily interact with the itch.io server-side API
Documentation
use serde::Deserialize;

use crate::{Itchio, ItchioError, SmallUser};

#[derive(Clone, Debug, Deserialize)]
struct WrappedUser {
  user: SmallUser
}

impl Itchio {
  /// Using a user_id, get some information about a User.
  pub async fn get_user(&self, user: u32) -> Result<SmallUser, ItchioError> {
    let endpoint = format!("users/{}", user);
    let response = self.request::<WrappedUser>(endpoint).await?;
    Ok(response.user)
  }
}

#[cfg(test)]
mod tests {
  use super::*;
  use std::env;
  use dotenv::dotenv;

  #[tokio::test]
  async fn good() {
    dotenv().ok();
    let client_secret = env::var("KEY").expect("KEY has to be set");
    let api = Itchio::new(client_secret).unwrap();
    let user = api.get_user(5771143).await.inspect_err(|err| eprintln!("Error spotted: {}", err));
    assert!(user.is_ok())
  }

  #[tokio::test]
  async fn bad_user() {
    dotenv().ok();
    let client_secret = env::var("KEY").expect("KEY has to be set");
    let api = Itchio::new(client_secret).unwrap();
    let user = api.get_user(0).await;
    assert!(user.is_err_and(|err| matches!(err, ItchioError::NotFound)))
  }

  #[tokio::test]
  async fn bad_key() {
    let api = Itchio::new("bad_key".to_string()).unwrap();
    let user = api.get_user(5771143).await;
    assert!(user.is_err_and(|err| matches!(err, ItchioError::BadKey)))
  }
}