skinport 0.1.1

Skinport API wrapper for Rust
Documentation
use crate::{
    builder::request::sales::{SalesHistory, SalesOutOfStock},
    client::Client,
    http::error::ApiErrorResponse,
    internal::models::sale::{SalesHistoryResponse, SalesOutOfStockResponse},
    util::{currency::Currency, game::Game},
};

impl Client {
    pub async fn get_sales_history(
        &self,
        market_hash_name: impl ToString,
        game: Option<Game>,
        currency: Option<Currency>,
    ) -> Result<Vec<SalesHistoryResponse>, ApiErrorResponse> {
        let mut request = SalesHistory::default();

        request.market_hash_name(market_hash_name);

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

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

        let url = api_url!("sales/history");

        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<SalesHistoryResponse>>(&items.unwrap());

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

        Ok(items.unwrap())
    }

    pub async fn get_sales_out_of_stock(
        &self,
        game: Option<Game>,
        currency: Option<Currency>,
    ) -> Result<Vec<SalesOutOfStockResponse>, ApiErrorResponse> {
        let mut request = SalesOutOfStock::default();

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

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

        let url = api_url!("sales/out-of-stock");

        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<SalesOutOfStockResponse>>(&items.unwrap());

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

        Ok(items.unwrap())
    }
}