275 lines
6.2 KiB
Rust
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;
|
|
}
|