mod-manager/src/api/mods.rs

275 lines
6.2 KiB
Rust

use serde::Deserialize;
use super::{get_curse_forge_client, API_URL};
/*
{
"data": [
{
"id": 0,
"gameId": 0,
"name": "string",
"slug": "string",
"links": {
"websiteUrl": "string",
"wikiUrl": "string",
"issuesUrl": "string",
"sourceUrl": "string"
},
"summary": "string",
"status": 1,
"downloadCount": 0,
"isFeatured": true,
"primaryCategoryId": 0,
"categories": [
{
"id": 0,
"gameId": 0,
"name": "string",
"slug": "string",
"url": "string",
"iconUrl": "string",
"dateModified": "2019-08-24T14:15:22Z",
"isClass": true,
"classId": 0,
"parentCategoryId": 0,
"displayIndex": 0
}
],
"classId": 0,
"authors": [
{
"id": 0,
"name": "string",
"url": "string"
}
],
"logo": {
"id": 0,
"modId": 0,
"title": "string",
"description": "string",
"thumbnailUrl": "string",
"url": "string"
},
"screenshots": [
{
"id": 0,
"modId": 0,
"title": "string",
"description": "string",
"thumbnailUrl": "string",
"url": "string"
}
],
"mainFileId": 0,
"latestFiles": [
{
"id": 0,
"gameId": 0,
"modId": 0,
"isAvailable": true,
"displayName": "string",
"fileName": "string",
"releaseType": 1,
"fileStatus": 1,
"hashes": [
{
"value": "string",
"algo": 1
}
],
"fileDate": "2019-08-24T14:15:22Z",
"fileLength": 0,
"downloadCount": 0,
"fileSizeOnDisk": 0,
"downloadUrl": "string",
"gameVersions": [
"string"
],
"sortableGameVersions": [
{
"gameVersionName": "string",
"gameVersionPadded": "string",
"gameVersion": "string",
"gameVersionReleaseDate": "2019-08-24T14:15:22Z",
"gameVersionTypeId": 0
}
],
"dependencies": [
{
"modId": 0,
"relationType": 1
}
],
"exposeAsAlternative": true,
"parentProjectFileId": 0,
"alternateFileId": 0,
"isServerPack": true,
"serverPackFileId": 0,
"isEarlyAccessContent": true,
"earlyAccessEndDate": "2019-08-24T14:15:22Z",
"fileFingerprint": 0,
"modules": [
{
"name": "string",
"fingerprint": 0
}
]
}
],
"latestFilesIndexes": [
{
"gameVersion": "string",
"fileId": 0,
"filename": "string",
"releaseType": 1,
"gameVersionTypeId": 0,
"modLoader": 0
}
],
"latestEarlyAccessFilesIndexes": [
{
"gameVersion": "string",
"fileId": 0,
"filename": "string",
"releaseType": 1,
"gameVersionTypeId": 0,
"modLoader": 0
}
],
"dateCreated": "2019-08-24T14:15:22Z",
"dateModified": "2019-08-24T14:15:22Z",
"dateReleased": "2019-08-24T14:15:22Z",
"allowModDistribution": true,
"gamePopularityRank": 0,
"isAvailable": true,
"thumbsUpCount": 0
}
],
"pagination": {
"index": 0,
"pageSize": 0,
"resultCount": 0,
"totalCount": 0
}
}
*/
#[derive(Debug, Deserialize)]
struct Hash {
value: String,
algo: i32,
}
#[derive(Debug, Deserialize)]
struct SortableGameVersion {
gameVersionName: String,
gameVersionPadded: String,
gameVersion: String,
gameVersionReleaseDate: String,
gameVersionTypeId: i32,
}
#[derive(Debug, Deserialize)]
struct Dependency {
modId: i32,
relationType: i32,
}
#[derive(Debug, Deserialize)]
struct Module {
name: String,
fingerprint: i32,
}
#[derive(Debug, Deserialize)]
pub struct Mod {
pub name: String,
//pub modId: i32,
//pub gameSlug: String,
//pub gameId: i32,
pub summary: String,
//pub defaultFileId: i32,
//pub downloadCount: i32,
//pub latestFiles: Vec<LatestFile>,
//pub latestFilesIndexes: Vec<LatestFileIndex>,
//pub latestEarlyAccessFilesIndexes: Vec<LatestEarlyAccessFileIndex>,
//pub dateCreated: String,
//pub dateModified: String,
//pub dateReleased: String,
//pub allowModDistribution: bool,
//pub gamePopularityRank: i32,
//pub isAvailable: bool,
//pub thumbsUpCount: i32,
}
#[derive(Debug, Deserialize)]
struct LatestFile {
fileId: i32,
displayName: String,
fileName: String,
fileDate: String,
fileLength: i32,
releaseType: i32,
fileStatus: i32,
downloadUrl: String,
gameVersions: Vec<String>,
sortableGameVersions: Vec<SortableGameVersion>,
dependencies: Vec<Dependency>,
exposeAsAlternative: bool,
parentProjectFileId: i32,
alternateFileId: i32,
isServerPack: bool,
serverPackFileId: i32,
isEarlyAccessContent: bool,
earlyAccessEndDate: String,
fileFingerprint: i32,
modules: Vec<Module>,
}
#[derive(Debug, Deserialize)]
struct LatestFileIndex {
gameVersion: String,
fileId: i32,
filename: String,
releaseType: i32,
gameVersionTypeId: i32,
modLoader: i32,
}
#[derive(Debug, Deserialize)]
struct LatestEarlyAccessFileIndex {
gameVersion: String,
fileId: i32,
filename: String,
releaseType: i32,
gameVersionTypeId: i32,
modLoader: i32,
}
#[derive(Debug, Deserialize)]
struct GetModsResponse {
data: Vec<Mod>,
pagination: Pagination,
}
#[derive(Debug, Deserialize)]
struct Pagination {
index: i32,
pageSize: i32,
resultCount: i32,
totalCount: i32,
}
pub fn get_mods(game_id: &i32) -> Vec<Mod> {
let client = get_curse_forge_client().unwrap();
let response = client
.get(&format!("{}/v1/mods/search", API_URL))
.query(&[("gameId", game_id)])
.send()
.unwrap();
let json: GetModsResponse = response.json().unwrap();
return json.data;
}