steam_api_wrapper/services/
get_schema_for_game.rs1use 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}