scl_core/download/
structs.rs

1//! 下载源数据结构
2use std::collections::BTreeMap as Map;
3
4use serde::Deserialize;
5
6/// 当前的最新版本和全部版本信息
7#[derive(Debug, Deserialize, PartialEq, Eq)]
8pub struct VersionManifest {
9    /// 最新的正式版本和快照版本
10    pub latest: LatestVersion,
11    /// 所有版本
12    pub versions: Vec<VersionInfo>,
13}
14
15/// 最新的正式版本和快照版本数据结构
16#[derive(Debug, Deserialize, PartialEq, Eq)]
17pub struct LatestVersion {
18    /// 最新的正式版本号
19    pub release: String,
20    /// 最新的快照版本号
21    pub snapshot: String,
22}
23
24/// 其中一个游戏版本的信息
25#[derive(Debug, Deserialize, PartialEq, Eq, Clone, Default)]
26pub struct VersionInfo {
27    /// 该版本的版本号
28    pub id: String,
29    /// 该版本的类型,有可能是 `release` 正式版本或 `snapshot` 快照版本
30    #[serde(rename = "type")]
31    pub version_type: String,
32    /// 该版本的版本元数据下载链接
33    ///
34    /// <https://launchermeta.mojang.com/v1/packages/e849f376647fd7160146d77002a3084efa8fb36f/21w08b.json>
35    pub url: String,
36    /// 该版本的更新日期
37    pub time: String,
38    /// 该版本的发布日期
39    #[serde(rename = "releaseTime")]
40    pub release_time: String,
41}
42
43/// 资源索引信息
44#[derive(Debug, Deserialize, PartialEq, Eq, Default)]
45pub struct AssetIndexes {
46    /// 是否需要在启动游戏前将资源文件映射(复制)到 游戏目录/resources 文件夹内
47    ///
48    /// 该参数会出现在 pre-1.6 的资源文件内,且都是 `true`
49    #[serde(default)]
50    pub map_to_resources: bool,
51    /// 所有的资源文件哈希对照表,键为原文件路径
52    pub objects: Map<String, AssetItem>,
53}
54
55/// 资源项目信息
56#[derive(Debug, Deserialize, PartialEq, Eq)]
57pub struct AssetItem {
58    /// 该资源文件的 SHA1 摘要值
59    ///
60    /// 通过将其拆解成开头两个字再和原摘要值组合即可取得该资源的下载链接
61    pub hash: String,
62    /// 该资源文件的大小,以字节为单位
63    pub size: usize,
64}
65
66/// Forge 加载器的版本信息
67#[derive(Clone, Debug)]
68pub struct ForgeVersionsData {
69    /// 推荐下载的加载器版本
70    pub recommended: Option<ForgeItemInfo>,
71    /// 最新的加载器版本
72    pub latest: Option<ForgeItemInfo>,
73    /// 所有加载器版本
74    pub all_versions: Vec<ForgeItemInfo>,
75}
76
77/// 一个加载器的版本信息
78#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
79pub struct ForgeItemInfo {
80    /// 该加载器的版本号
81    ///
82    /// 在 1.14 以前,Forge 使用四元数来记录版本,而后去掉了最后一个构建版本号
83    pub version: String,
84    /// 该加载器对应支持的原版版本号
85    pub mcversion: String,
86    /// 该加载器的下载文件列表,有安装器或通用版本或模组开发套件(MDK)
87    pub files: Vec<ForgeFile>,
88}
89
90/// 被特殊标记的 Forge 版本
91#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
92pub struct ForgePromoItem {
93    /// 该 Forge 模组加载器的版本名称
94    pub name: String,
95    /// 该加载器的指定版本信息
96    pub build: Option<ForgeItemInfo>,
97}
98
99/// 该文件的下载信息
100#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
101pub struct ForgeFile {
102    /// 文件的类型,有可能是安装器或通用版本或模组开发套件(MDK)
103    pub category: String,
104    /// 文件的格式,有可能是 EXE ZIP JAR 等
105    pub format: String,
106}
107
108/// Optifine 的版本信息
109#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
110pub struct OptifineVersionMeta {
111    /// 该 Optifine 对应支持的原版版本
112    pub mcversion: String,
113    /// 该 Optifine 的类型, 1.6+ 后此处固定为 `HD_U`
114    #[serde(rename = "type")]
115    pub version_type: String,
116    /// 该 Optifine 的修订版本号
117    pub patch: String,
118    /// 该 Optifine 的下载文件名称
119    pub filename: String,
120}