model/lockfile: revert get_project to O(n) linear scan; remove unused project index
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I3a35ab4ce5dec8ce95a736440fa293fe6a6a6964
This commit is contained in:
parent
8ed0b6fb12
commit
fc2d89892c
1 changed files with 61 additions and 48 deletions
|
|
@ -578,6 +578,67 @@ pub struct LockFile {
|
||||||
pub lockfile_version: u32,
|
pub lockfile_version: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl LockFile {
|
||||||
|
pub fn new(
|
||||||
|
target: Option<Target>,
|
||||||
|
mc_versions: Vec<String>,
|
||||||
|
loaders: HashMap<String, String>,
|
||||||
|
) -> Self {
|
||||||
|
Self {
|
||||||
|
target,
|
||||||
|
mc_versions,
|
||||||
|
loaders,
|
||||||
|
projects: Vec::new(),
|
||||||
|
lockfile_version: LOCKFILE_VERSION,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_project(&self, pakku_id: &str) -> Option<&Project> {
|
||||||
|
self
|
||||||
|
.projects
|
||||||
|
.iter()
|
||||||
|
.find(|p| p.pakku_id.as_deref() == Some(pakku_id))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_loader_names(&self) -> Vec<String> {
|
||||||
|
self.loaders.keys().cloned().collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn remove_project(&mut self, pakku_id: &str) -> Option<Project> {
|
||||||
|
if let Some(pos) = self
|
||||||
|
.projects
|
||||||
|
.iter()
|
||||||
|
.position(|p| p.pakku_id.as_deref() == Some(pakku_id))
|
||||||
|
{
|
||||||
|
Some(self.projects.remove(pos))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn find_project(&self, pakku_id: &str) -> Option<&Project> {
|
||||||
|
self.get_project(pakku_id)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn find_project_mut(&mut self, pakku_id: &str) -> Option<&mut Project> {
|
||||||
|
self
|
||||||
|
.projects
|
||||||
|
.iter_mut()
|
||||||
|
.find(|p| p.pakku_id.as_deref() == Some(pakku_id))
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn find_project_by_platform_id(
|
||||||
|
&self,
|
||||||
|
platform: &str,
|
||||||
|
id: &str,
|
||||||
|
) -> Option<&Project> {
|
||||||
|
self
|
||||||
|
.projects
|
||||||
|
.iter()
|
||||||
|
.find(|p| p.id.get(platform).is_some_and(|pid| pid == id))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl LockFile {
|
impl LockFile {
|
||||||
pub fn load<P: AsRef<Path>>(path: P) -> Result<Self> {
|
pub fn load<P: AsRef<Path>>(path: P) -> Result<Self> {
|
||||||
Self::load_with_validation(path, true)
|
Self::load_with_validation(path, true)
|
||||||
|
|
@ -720,52 +781,4 @@ impl LockFile {
|
||||||
self.projects.push(project);
|
self.projects.push(project);
|
||||||
self.projects.sort_by_key(super::project::Project::get_name);
|
self.projects.sort_by_key(super::project::Project::get_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_project(&self, pakku_id: &str) -> Option<&Project> {
|
|
||||||
self
|
|
||||||
.projects
|
|
||||||
.iter()
|
|
||||||
.find(|p| p.pakku_id.as_deref() == Some(pakku_id))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn get_loader_names(&self) -> Vec<String> {
|
|
||||||
self.loaders.keys().cloned().collect()
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn remove_project(&mut self, pakku_id: &str) -> Option<Project> {
|
|
||||||
if let Some(pos) = self
|
|
||||||
.projects
|
|
||||||
.iter()
|
|
||||||
.position(|p| p.pakku_id.as_deref() == Some(pakku_id))
|
|
||||||
{
|
|
||||||
Some(self.projects.remove(pos))
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn find_project(&self, pakku_id: &str) -> Option<&Project> {
|
|
||||||
self
|
|
||||||
.projects
|
|
||||||
.iter()
|
|
||||||
.find(|p| p.pakku_id.as_deref() == Some(pakku_id))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn find_project_mut(&mut self, pakku_id: &str) -> Option<&mut Project> {
|
|
||||||
self
|
|
||||||
.projects
|
|
||||||
.iter_mut()
|
|
||||||
.find(|p| p.pakku_id.as_deref() == Some(pakku_id))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn find_project_by_platform_id(
|
|
||||||
&self,
|
|
||||||
platform: &str,
|
|
||||||
id: &str,
|
|
||||||
) -> Option<&Project> {
|
|
||||||
self
|
|
||||||
.projects
|
|
||||||
.iter()
|
|
||||||
.find(|p| p.id.get(platform).is_some_and(|pid| pid == id))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue