2023-12-21 11:30:30 +00:00
|
|
|
use serde::Deserialize;
|
|
|
|
|
|
|
|
use crate::api::*;
|
|
|
|
|
|
|
|
#[derive(Deserialize, Debug)]
|
2023-12-21 22:25:08 +00:00
|
|
|
struct GetGamesResponse {
|
2023-12-21 11:30:30 +00:00
|
|
|
data: Vec<Game>,
|
|
|
|
pagination: Pagination,
|
|
|
|
}
|
|
|
|
|
2023-12-21 22:25:08 +00:00
|
|
|
#[derive(Deserialize, Debug)]
|
|
|
|
struct GetGameResponse {
|
|
|
|
data: Game,
|
|
|
|
}
|
|
|
|
|
2023-12-21 11:30:30 +00:00
|
|
|
#[derive(Deserialize, Debug)]
|
|
|
|
struct Game {
|
|
|
|
id: u32,
|
|
|
|
name: String,
|
|
|
|
slug: String,
|
|
|
|
dateModified: String,
|
|
|
|
assets: Assets,
|
|
|
|
status: u32,
|
|
|
|
apiStatus: u32,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
|
|
struct Assets {
|
|
|
|
iconUrl: Option<String>,
|
|
|
|
tileUrl: String,
|
|
|
|
coverUrl: Option<String>,
|
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
|
|
struct Pagination {
|
|
|
|
index: u32,
|
|
|
|
pageSize: u32,
|
|
|
|
resultCount: u32,
|
|
|
|
totalCount: u32,
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn get_games() -> Vec<String> {
|
|
|
|
let client = base::get_curse_forge_client().unwrap();
|
|
|
|
let response = client
|
|
|
|
.get(&format!("{}/v1/games", base::API_URL))
|
|
|
|
.send()
|
|
|
|
.unwrap();
|
2023-12-21 22:25:08 +00:00
|
|
|
let json: GetGamesResponse = response.json().unwrap();
|
2023-12-21 11:30:30 +00:00
|
|
|
|
|
|
|
return json.data.iter().map(|game| game.name.clone()).collect();
|
|
|
|
}
|
2023-12-21 22:25:08 +00:00
|
|
|
|
|
|
|
pub fn get_game(id: &i32) -> Game {
|
|
|
|
let client = base::get_curse_forge_client().unwrap();
|
|
|
|
let response = client
|
|
|
|
.get(&format!("{}/v1/games/{}", base::API_URL, id))
|
|
|
|
.send()
|
|
|
|
.unwrap();
|
|
|
|
let json: GetGameResponse = response.json().unwrap();
|
|
|
|
|
|
|
|
return json.data;
|
|
|
|
}
|