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,