From d14288c76fc33e049b40ca13b97538ab569a48d7 Mon Sep 17 00:00:00 2001 From: bigfoot547 Date: Thu, 23 Jan 2025 00:23:08 -0600 Subject: fix failing to launch 1.16.5 --- src/version.rs | 55 ++++++++++++------------------------------------------- 1 file changed, 12 insertions(+), 43 deletions(-) (limited to 'src/version.rs') diff --git a/src/version.rs b/src/version.rs index 462ba3b..b844f23 100644 --- a/src/version.rs +++ b/src/version.rs @@ -214,7 +214,7 @@ pub struct Library { impl Library { pub fn get_canonical_name(&self) -> String { - canonicalize_library_name(self.name.as_str()) + canonicalize_library_name(self.name.as_str(), self.natives.as_ref().map_or(None, |_| Some("__ozone_natives"))) } } @@ -258,8 +258,8 @@ pub struct CompleteVersion { #[serde(default)] pub downloads: BTreeMap, - #[serde(default, deserialize_with = "deserialize_libraries")] - pub libraries: IndexMap, + #[serde(default)] + pub libraries: Vec, pub id: String, pub jar: Option, // used as the jar filename if specified? (no longer used officially) @@ -321,9 +321,7 @@ impl CompleteVersion { self.downloads.entry(*dltype).or_insert_with(|| dl.clone()); } - for (name, lib) in other.libraries.iter().by_ref() { - self.libraries.entry(name.to_owned()).or_insert_with(|| lib.clone()); - } + self.libraries.splice(0..0, other.libraries.iter().cloned()); replace_missing!(logging); replace_missing!(main_class); @@ -344,11 +342,12 @@ impl CompleteVersion { } } -fn canonicalize_library_name(name: &str) -> String { +fn canonicalize_library_name(name: &str, suffix: Option<&str>) -> String { name.split(':') .enumerate() .filter(|(i, _)| *i != 2) .map(|(_, s)| s.to_ascii_lowercase()) + .chain(suffix.into_iter().map(|s| s.to_owned())) .collect::>() .join(":") } @@ -387,37 +386,6 @@ where deserializer.deserialize_str(DateTimeVisitor) } -fn deserialize_libraries<'de, D>(deserializer: D) -> Result, D::Error> -where - D: Deserializer<'de> -{ - struct LibrariesVisitor; - - impl<'de> Visitor<'de> for LibrariesVisitor { - type Value = IndexMap; - - fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str("an array of libraries") - } - - fn visit_seq(self, mut seq: A) -> Result - where - A: SeqAccess<'de>, - { - let mut map = IndexMap::new(); - - while let Some(lib) = seq.next_element::()? { - //map.insert(canonicalize_library_name(lib.name.as_str()), lib); - map.insert(lib.name.as_str().to_owned(), lib); - } - - Ok(map) - } - } - - deserializer.deserialize_seq(LibrariesVisitor) -} - // https://serde.rs/string-or-struct.html fn string_or_struct<'de, T, D>(deserializer: D) -> Result where @@ -511,10 +479,11 @@ mod tests { #[test] fn test_it3() { - assert_eq!(canonicalize_library_name("group:artifact:version"), String::from("group:artifact")); - assert_eq!(canonicalize_library_name("group:artifact:version:specifier"), String::from("group:artifact:specifier")); - assert_eq!(canonicalize_library_name("not_enough:fields"), String::from("not_enough:fields")); - assert_eq!(canonicalize_library_name("word"), String::from("word")); - assert_eq!(canonicalize_library_name(""), String::from("")); + assert_eq!(canonicalize_library_name("group:artifact:version", None), String::from("group:artifact")); + assert_eq!(canonicalize_library_name("group:artifact:version:specifier", None), String::from("group:artifact:specifier")); + assert_eq!(canonicalize_library_name("not_enough:fields", None), String::from("not_enough:fields")); + assert_eq!(canonicalize_library_name("word", None), String::from("word")); + assert_eq!(canonicalize_library_name("", None), String::from("")); + assert_eq!(canonicalize_library_name("group:artifact:version", Some("suffix")), String::from("group:artifact:suffix")); } } -- cgit v1.2.3-70-g09d2