diff options
Diffstat (limited to 'src/minecraft/manifests.rs')
| -rw-r--r-- | src/minecraft/manifests.rs | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/src/minecraft/manifests.rs b/src/minecraft/manifests.rs index 8bdec26..64e38da 100644 --- a/src/minecraft/manifests.rs +++ b/src/minecraft/manifests.rs | |||
| @@ -1,11 +1,18 @@ | |||
| 1 | #![allow(dead_code)] | 1 | #![allow(dead_code)] |
| 2 | 2 | ||
| 3 | use std::collections::HashMap; | 3 | use crate::{constants::VERSION_MANIFEST_URL, errors::McError}; |
| 4 | 4 | use reqwest::get; | |
| 5 | use reqwest; | ||
| 6 | use serde::Deserialize; | 5 | use serde::Deserialize; |
| 6 | use serde_json::{from_str, Value}; | ||
| 7 | use std::collections::HashMap; | ||
| 8 | use McError::Config; | ||
| 7 | 9 | ||
| 8 | use crate::{constants::VERSION_MANIFEST_URL, errors::McError}; | 10 | #[derive(Debug, Deserialize)] |
| 11 | #[serde(rename_all = "camelCase")] | ||
| 12 | pub struct JavaVersionInfo { | ||
| 13 | pub component: String, | ||
| 14 | pub major_version: u8, | ||
| 15 | } | ||
| 9 | 16 | ||
| 10 | #[derive(Debug, Deserialize)] | 17 | #[derive(Debug, Deserialize)] |
| 11 | pub struct Version { | 18 | pub struct Version { |
| @@ -19,6 +26,10 @@ pub struct Version { | |||
| 19 | 26 | ||
| 20 | #[serde(rename = "assetIndex")] | 27 | #[serde(rename = "assetIndex")] |
| 21 | pub asset_index: Option<AssetIndex>, | 28 | pub asset_index: Option<AssetIndex>, |
| 29 | |||
| 30 | #[serde(default)] | ||
| 31 | #[serde(rename = "javaVersion")] | ||
| 32 | pub java_version: Option<JavaVersionInfo>, | ||
| 22 | } | 33 | } |
| 23 | 34 | ||
| 24 | #[derive(Debug, Deserialize)] | 35 | #[derive(Debug, Deserialize)] |
| @@ -83,15 +94,13 @@ pub struct OsRule { | |||
| 83 | pub async fn load_version( | 94 | pub async fn load_version( |
| 84 | cfg: &crate::config::Config, | 95 | cfg: &crate::config::Config, |
| 85 | ) -> Result<Version, McError> { | 96 | ) -> Result<Version, McError> { |
| 86 | let manifest_text = reqwest::get(VERSION_MANIFEST_URL) | 97 | let manifest_text = get(VERSION_MANIFEST_URL).await?.text().await?; |
| 87 | .await? | 98 | let root: Value = from_str(&manifest_text)?; |
| 88 | .text() | 99 | |
| 89 | .await?; | ||
| 90 | let root: serde_json::Value = serde_json::from_str(&manifest_text)?; | ||
| 91 | let version_id = if cfg.version == "latest" { | 100 | let version_id = if cfg.version == "latest" { |
| 92 | root["latest"]["release"] | 101 | root["latest"]["release"] |
| 93 | .as_str() | 102 | .as_str() |
| 94 | .ok_or_else(|| McError::Config("missing latest.release".into()))? | 103 | .ok_or_else(|| Config("missing latest.release".into()))? |
| 95 | .to_string() | 104 | .to_string() |
| 96 | } else { | 105 | } else { |
| 97 | cfg.version.clone() | 106 | cfg.version.clone() |
| @@ -99,21 +108,19 @@ pub async fn load_version( | |||
| 99 | 108 | ||
| 100 | let versions = root["versions"] | 109 | let versions = root["versions"] |
| 101 | .as_array() | 110 | .as_array() |
| 102 | .ok_or_else(|| McError::Config("missing versions array".into()))?; | 111 | .ok_or_else(|| Config("missing versions array".into()))?; |
| 103 | 112 | ||
| 104 | let version_entry = versions | 113 | let version_entry = versions |
| 105 | .iter() | 114 | .iter() |
| 106 | .find(|v| v["id"].as_str() == Some(&version_id)) | 115 | .find(|v| v["id"].as_str() == Some(&version_id)) |
| 107 | .ok_or_else(|| { | 116 | .ok_or_else(|| Config(format!("version '{}' not found", version_id)))?; |
| 108 | McError::Config(format!("version '{}' not found", version_id)) | ||
| 109 | })?; | ||
| 110 | 117 | ||
| 111 | let url = version_entry["url"] | 118 | let url = version_entry["url"] |
| 112 | .as_str() | 119 | .as_str() |
| 113 | .ok_or_else(|| McError::Config("missing version url".into()))?; | 120 | .ok_or_else(|| Config("missing version url".into()))?; |
| 114 | 121 | ||
| 115 | let version_text = reqwest::get(url).await?.text().await?; | 122 | let version_text = get(url).await?.text().await?; |
| 116 | let version: Version = serde_json::from_str(&version_text)?; | 123 | let version: Version = from_str(&version_text)?; |
| 117 | 124 | ||
| 118 | Ok(version) | 125 | Ok(version) |
| 119 | } | 126 | } |
