steam_api_wrapper/services/
get_schema_for_game.rs

1use anyhow::{Error, Result};
2use serde::{Deserialize, Serialize};
3
4use crate::{
5    generics::{BASE_URL, GET_SCHEMA_FOR_GAME, ISTEAM_USER_STATS, VERSION_V2},
6    helpers::make_api_call::{api_call, FunctionResult},
7    Steam,
8};
9
10#[derive(Clone, Debug, Deserialize, Serialize)]
11pub struct Achievement {
12    #[serde(rename = "name")]
13    pub achievement_name: String,
14    #[serde(rename = "defaultvalue")]
15    pub default_value: u32,
16    #[serde(rename = "displayName")]
17    pub display_name: String,
18    pub hidden: u32,
19    pub description: Option<String>,
20    pub icon: String,
21    pub icongray: String,
22}
23
24#[derive(Clone, Debug, Deserialize, Serialize)]
25pub struct AvailableGameStats {
26    pub achievements: Vec<Achievement>,
27}
28
29#[derive(Clone, Debug, Deserialize, Serialize)]
30pub struct Game {
31    #[serde(rename = "gameName")]
32    pub game_name: String,
33    #[serde(rename = "gameVersion")]
34    pub game_version: String,
35    #[serde(rename = "availableGameStats")]
36    pub available_game_stats: AvailableGameStats,
37}
38
39#[derive(Clone, Debug, Deserialize, Serialize)]
40pub struct Root {
41    pub game: Game,
42}
43
44impl Steam {
45    pub async fn get_schema_for_game(&self, app_id: u32) -> Result<Root, Error> {
46        let query = format!("?key={}&appid={}", self.api_key, app_id);
47        let url = format!(
48            "{}/{}/{}/{}/{}",
49            BASE_URL, ISTEAM_USER_STATS, GET_SCHEMA_FOR_GAME, VERSION_V2, query
50        );
51
52        match api_call::<Root>(url).await {
53            FunctionResult::Success(response) => Ok(response),
54            FunctionResult::Error(err) => Err(err),
55        }
56    }
57}