From 55f9e3f6d6095b4e627b41acc3a7cd2800c9408a Mon Sep 17 00:00:00 2001 From: Niklas Kapelle Date: Mon, 16 Mar 2026 17:08:10 +0100 Subject: [PATCH] use HashSet instead of Vec for file links --- src/types/installed_mod.rs | 10 +++++----- src/types/link.rs | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/types/installed_mod.rs b/src/types/installed_mod.rs index eced8c6..518a0bd 100644 --- a/src/types/installed_mod.rs +++ b/src/types/installed_mod.rs @@ -1,4 +1,4 @@ -use std::ffi::OsStr; +use std::{collections::HashSet, ffi::OsStr}; use serde::{Deserialize, Serialize}; @@ -10,7 +10,7 @@ use crate::{ #[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)] pub struct InstalledMod { id: String, - files: Vec, + files: HashSet, priority: isize, } @@ -18,13 +18,13 @@ impl InstalledMod { pub fn new(root_mod_id: &str, priority: isize) -> Self { Self { id: root_mod_id.to_owned(), - files: Vec::new(), + files: HashSet::new(), priority, } } pub fn add_file(&mut self, file: &ModFile) { - self.files.push(Link::from_mod_file(file)); + self.files.insert(Link::from_mod_file(file)); } /// Get the id of the mod @@ -38,7 +38,7 @@ impl InstalledMod { } /// The selected files - pub fn files(&self) -> &[Link] { + pub fn files(&self) -> &HashSet { &self.files } diff --git a/src/types/link.rs b/src/types/link.rs index d81cbbb..6f51afc 100644 --- a/src/types/link.rs +++ b/src/types/link.rs @@ -5,7 +5,7 @@ use serde::{Deserialize, Serialize}; use crate::types::mod_file::ModFile; /// A link between a file from a mod and a destination in a ModdedInstance -#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq)] +#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Eq, Hash)] #[serde(from = "(PathBuf, PathBuf)", into = "(PathBuf,PathBuf)")] pub struct Link { src: PathBuf,