use super::*;
use std::collections::HashMap;
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct Version {
pub name: String,
pub version_number: String,
pub changelog: Option<String>,
pub dependencies: Vec<Dependency>,
pub game_versions: Vec<String>,
pub version_type: VersionType,
pub loaders: Vec<String>,
pub featured: bool,
pub status: Option<Status>,
pub requested_status: Option<RequestedStatus>,
pub id: ID,
pub project_id: ID,
pub author_id: ID,
pub date_published: UtcTime,
pub downloads: Number,
#[deprecated = "Read from `changelog` instead"]
#[serde(deserialize_with = "deserialise_optional_url")]
pub changelog_url: Option<Url>,
pub files: Vec<VersionFile>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct VersionFile {
pub hashes: Hashes,
pub url: Url,
pub filename: String,
pub primary: bool,
pub size: Number,
pub file_type: Option<AdditionalFileType>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct Hashes {
pub sha512: String,
pub sha1: String,
#[serde(flatten)]
pub others: HashMap<String, String>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct LatestVersionBody {
pub loaders: Vec<String>,
pub game_versions: Vec<String>,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct LatestVersionsBody {
pub hashes: Vec<String>,
pub algorithm: HashAlgorithm,
pub loaders: Vec<String>,
pub game_versions: Vec<String>,
}
#[derive(Serialize, Deserialize, Clone, Debug)]
pub struct Dependency {
pub version_id: Option<ID>,
pub project_id: Option<ID>,
pub file_name: Option<String>,
pub dependency_type: DependencyType,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum HashAlgorithm {
SHA512,
SHA1,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum VersionType {
Alpha,
Beta,
Release,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum DependencyType {
Required,
Optional,
Incompatible,
Embedded,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum Status {
Listed,
Archived,
Draft,
Unlisted,
Scheduled,
Unknown,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
pub enum RequestedStatus {
Listed,
Archived,
Draft,
Unlisted,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
pub enum AdditionalFileType {
RequiredResourcePack,
OptionalResourcePack,
}