skinport 0.1.1

Skinport API wrapper for Rust
Documentation
use crate::{
    builder::request::items::Items,
    client::Client,
    http::error::ApiErrorResponse,
    internal::models::item::ItemResponse,
    util::{currency::Currency, game::Game},
};

impl Client {
    pub async fn get_items(
        &self,
        game: Option<Game>,
        currency: Option<Currency>,
        tradable: Option<bool>,
    ) -> Result<Vec<ItemResponse>, ApiErrorResponse> {
        let mut request = Items::default();

        if let Some(game) = game {
            request.app_id(game.identifier());
        }

        if let Some(currency) = currency {
            request.currency(currency);
        }

        if let Some(tradable) = tradable {
            request.is_tradable(tradable);
        }

        let url = api_url!("items");

        let response = self.get(url, &request.0).await?;

        let items = response.text_with_charset("utf-8").await;

        if items.is_err() {
            return Err(ApiErrorResponse::parse_items());
        }

        let items = serde_json::from_str::<Vec<ItemResponse>>(&items.unwrap());

        if items.is_err() {
            return Err(ApiErrorResponse::parse_items());
        }

        Ok(items.unwrap())
    }
}