From 34baf445347cefde0d34a109222ffbfc7b136b65 Mon Sep 17 00:00:00 2001 From: Geometrically <18202329+Geometrically@users.noreply.github.com> Date: Sun, 7 Jan 2024 18:36:42 -0500 Subject: [PATCH] Fix packs logic (#837) * Fix packs logic * Clippy --- src/models/v3/pack.rs | 10 +++++----- src/routes/v2/versions.rs | 24 +++++++++++++++++++++++- src/search/mod.rs | 1 - src/validate/mod.rs | 2 +- src/validate/modpack.rs | 2 +- 5 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/models/v3/pack.rs b/src/models/v3/pack.rs index 78b5931db..c73def007 100644 --- a/src/models/v3/pack.rs +++ b/src/models/v3/pack.rs @@ -2,7 +2,7 @@ use crate::{models::v2::projects::LegacySideType, util::env::parse_strings_from_ use serde::{Deserialize, Serialize}; use validator::Validate; -#[derive(Serialize, Deserialize, Validate, Eq, PartialEq)] +#[derive(Serialize, Deserialize, Validate, Eq, PartialEq, Debug)] #[serde(rename_all = "camelCase")] pub struct PackFormat { pub game: String, @@ -18,7 +18,7 @@ pub struct PackFormat { pub dependencies: std::collections::HashMap, } -#[derive(Serialize, Deserialize, Validate, Eq, PartialEq)] +#[derive(Serialize, Deserialize, Validate, Eq, PartialEq, Debug)] #[serde(rename_all = "camelCase")] pub struct PackFile { pub path: String, @@ -54,7 +54,7 @@ fn validate_download_url(values: &[String]) -> Result<(), validator::ValidationE Ok(()) } -#[derive(Serialize, Deserialize, Eq, PartialEq, Hash)] +#[derive(Serialize, Deserialize, Eq, PartialEq, Hash, Debug)] #[serde(rename_all = "camelCase", from = "String")] pub enum PackFileHash { Sha1, @@ -72,14 +72,14 @@ impl From for PackFileHash { } } -#[derive(Serialize, Deserialize, Eq, PartialEq, Hash)] +#[derive(Serialize, Deserialize, Eq, PartialEq, Hash, Debug)] #[serde(rename_all = "camelCase")] pub enum EnvType { Client, Server, } -#[derive(Serialize, Deserialize, Clone, Hash, PartialEq, Eq)] +#[derive(Serialize, Deserialize, Clone, Hash, PartialEq, Eq, Debug)] #[serde(rename_all = "kebab-case")] pub enum PackDependency { Forge, diff --git a/src/routes/v2/versions.rs b/src/routes/v2/versions.rs index ceeaf7d74..4ec062c9f 100644 --- a/src/routes/v2/versions.rs +++ b/src/routes/v2/versions.rs @@ -46,6 +46,17 @@ pub async fn version_list( redis: web::Data, session_queue: web::Data, ) -> Result { + let loaders = if let Some(loaders) = filters.loaders { + if let Ok(mut loaders) = serde_json::from_str::>(&loaders) { + loaders.push("mrpack".to_string()); + Some(loaders) + } else { + None + } + } else { + None + }; + let loader_fields = if let Some(game_versions) = filters.game_versions { // TODO: extract this logic which is similar to the other v2->v3 version_file functions let mut loader_fields = HashMap::new(); @@ -57,6 +68,17 @@ pub async fn version_list( game_versions.push(serde_json::json!(gv.clone())); } loader_fields.insert("game_versions".to_string(), game_versions); + + if let Some(ref loaders) = loaders { + loader_fields.insert( + "loaders".to_string(), + loaders + .iter() + .map(|x| serde_json::json!(x.clone())) + .collect(), + ); + } + serde_json::to_string(&loader_fields).ok() }) } else { @@ -65,7 +87,7 @@ pub async fn version_list( let filters = v3::versions::VersionListFilters { loader_fields, - loaders: filters.loaders, + loaders: loaders.and_then(|x| serde_json::to_string(&x).ok()), featured: filters.featured, version_type: filters.version_type, limit: filters.limit, diff --git a/src/search/mod.rs b/src/search/mod.rs index 928b69778..74d2ee0c1 100644 --- a/src/search/mod.rs +++ b/src/search/mod.rs @@ -9,7 +9,6 @@ use meilisearch_sdk::client::Client; use serde::{Deserialize, Serialize}; use serde_json::Value; use std::borrow::Cow; -use std::cmp::min; use std::collections::HashMap; use std::fmt::Write; use thiserror::Error; diff --git a/src/validate/mod.rs b/src/validate/mod.rs index 905079276..d305b5752 100644 --- a/src/validate/mod.rs +++ b/src/validate/mod.rs @@ -44,7 +44,7 @@ pub enum ValidationError { Database(#[from] DatabaseError), } -#[derive(Eq, PartialEq)] +#[derive(Eq, PartialEq, Debug)] pub enum ValidationResult { /// File should be marked as primary with pack file data PassWithPackDataAndFiles { diff --git a/src/validate/modpack.rs b/src/validate/modpack.rs index 02ffd75b4..ad8719857 100644 --- a/src/validate/modpack.rs +++ b/src/validate/modpack.rs @@ -18,7 +18,7 @@ impl super::Validator for ModpackValidator { } fn get_supported_loaders(&self) -> &[&str] { - &["forge", "fabric", "quilt"] + &["forge", "fabric", "quilt", "mrpack"] } fn get_supported_game_versions(&self) -> SupportedGameVersions {