From 88728968b9a05c038e1346bb378a88cdcc1f000d Mon Sep 17 00:00:00 2001 From: bigfoot547 Date: Tue, 17 Dec 2024 16:06:48 -0600 Subject: initial commit --- src/version/manifest.rs | 119 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 src/version/manifest.rs (limited to 'src/version') diff --git a/src/version/manifest.rs b/src/version/manifest.rs new file mode 100644 index 0000000..a44e435 --- /dev/null +++ b/src/version/manifest.rs @@ -0,0 +1,119 @@ +use core::fmt; + +use chrono::{DateTime, Utc}; +use serde::{de::Visitor, Deserialize}; + +#[derive(Deserialize)] +pub struct LatestVersions { + release: String, + snapshot: String +} + +impl LatestVersions { + pub fn get_release(&self) -> &String { + &self.release + } + + pub fn get_snapshot(&self) -> &String { + &self.snapshot + } +} + +#[derive(Debug)] +pub enum VersionType { + Snapshot, + Release, + OldBeta, + OldAlpha, + Other(String) +} + +struct VersionTypeVisitor; + +impl<'de> Visitor<'de> for VersionTypeVisitor { + type Value = VersionType; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> fmt::Result { + formatter.write_str("a Minecraft release type") + } + + fn visit_str(self, v: &str) -> Result + where + E: serde::de::Error, { + match v { + "snapshot" => Ok(VersionType::Snapshot), + "release" => Ok(VersionType::Release), + "old_beta" => Ok(VersionType::OldBeta), + "old_alpha" => Ok(VersionType::OldAlpha), + _ => Ok(VersionType::Other(v.to_owned())) + } + } +} + +impl<'de> Deserialize<'de> for VersionType { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de> { + deserializer.deserialize_string(VersionTypeVisitor) + } +} + +// https://piston-meta.mojang.com/mc/game/version_manifest_v2.json +#[derive(Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct VersionManifestVersion { + id: String, + #[serde(rename = "type")] + version_type: VersionType, + url: String, + time: DateTime, + release_time: DateTime, + sha1: String, + compliance_level: u32 +} + +impl VersionManifestVersion { + pub fn get_id(&self) -> &String { + &self.id + } + + pub fn get_version_type(&self) -> &VersionType { + &self.version_type + } + + pub fn get_url(&self) -> &String { + &self.url + } + + pub fn get_time(&self) -> &DateTime { + &self.time + } + + pub fn get_release_time(&self) -> &DateTime { + &self.release_time + } + + pub fn get_sha1(&self) -> &String { + &self.sha1 + } + + pub fn get_compliance_level(&self) -> u32 { + self.compliance_level + } +} + +#[derive(Deserialize)] +pub struct VersionManifest { + latest: LatestVersions, + versions: Vec +} + +impl VersionManifest { + pub fn get_latest(&self) -> &LatestVersions { + &self.latest + } + + pub fn get_versions(&self) -> &Vec { + &self.versions + } +} -- cgit v1.2.3-70-g09d2