From 5b04b78d0a9e7252639c63057db20e7c926ec7ee Mon Sep 17 00:00:00 2001 From: Warren Hood Date: Thu, 15 Aug 2024 01:03:05 +0200 Subject: [PATCH] Switch to using a hashmap for the mods in the modpack --- src/modpack.rs | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/src/modpack.rs b/src/modpack.rs index df7d66b..5e698c2 100644 --- a/src/modpack.rs +++ b/src/modpack.rs @@ -1,4 +1,4 @@ -use std::{borrow::BorrowMut, error::Error, path::PathBuf}; +use std::{borrow::BorrowMut, collections::HashMap, error::Error, path::PathBuf}; use serde::{Deserialize, Serialize}; @@ -35,14 +35,6 @@ pub struct ModMeta { download_url: Option, } -#[derive(Debug, Serialize, Deserialize, PartialEq)] -struct ModMetaBuilder { - mod_name: String, - version: String, - providers: Option>, - download_url: Option, -} - impl ModMeta { pub fn new(mod_name: &str) -> Result> { if mod_name.contains("@") { @@ -128,7 +120,7 @@ pub struct ModpackMeta { pack_name: String, mc_version: String, modloader: ModLoader, - mods: Vec, + mods: HashMap, default_providers: Vec, } @@ -167,18 +159,16 @@ impl ModpackMeta { } pub fn add_mod(mut self, mod_meta: ModMeta) -> Self { - if !self.mods.contains(&mod_meta) { - self.mods = self - .mods - .into_iter() - .filter(|m| m.mod_name != mod_meta.mod_name) - .collect(); + if let Some(old_mod_meta) = self.mods.get(&mod_meta.mod_name) { + println!("Updating {} version {}->{}", mod_meta.mod_name, old_mod_meta.version, mod_meta.version); + } + else { println!( "Adding {}@{} to modpack '{}'...", mod_meta.mod_name, mod_meta.version, self.pack_name ); - self.mods.push(mod_meta); } + self.mods.insert(mod_meta.mod_name.to_string(), mod_meta); self }