use serde::{Deserialize, Serialize}; use oneclient_common::domain::GameLoader; use oneclient_common::patch::Patch; use oneclient_db::models::ClusterKind; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct CreateClusterOptions { pub name: String, pub mc_version: String, pub mc_loader: GameLoader, pub mc_loader_version: Option, pub mem_max: Option, pub kind: ClusterKind, pub user_created: bool, pub modpack: bool, pub description: Option, pub tags: Vec, } impl CreateClusterOptions { pub fn new( name: impl Into, mc_version: impl Into, mc_loader: GameLoader, ) -> Self { Self { name: name.into(), mc_version: mc_version.into(), mc_loader, mc_loader_version: None, mem_max: None, kind: ClusterKind::OneClient, user_created: false, modpack: false, description: None, tags: Vec::new(), } } pub fn mem_max(mut self, megabytes: u32) -> Self { self.mem_max = Some(megabytes); self } pub fn loader_version(mut self, version: impl Into) -> Self { self.mc_loader_version = Some(version.into()); self } pub fn kind(mut self, kind: ClusterKind) -> Self { self.kind = kind; self } pub fn user_created(mut self, user_created: bool) -> Self { self.user_created = user_created; self } pub fn modpack(mut self, modpack: bool) -> Self { self.modpack = modpack; self } pub fn description(mut self, description: impl Into) -> Self { self.description = Some(description.into()); self } pub fn tags(mut self, tags: Vec) -> Self { self.tags = tags; self } } #[derive(Debug, Clone, Default, Serialize, Deserialize)] pub struct ClusterUpdate { pub name: Option, pub setting_profile_name: Patch, pub mc_loader_version: Patch, pub linked_modpack_hash: Patch, pub description: Patch, pub tags: Option>, pub cover_path: Patch, } impl ClusterUpdate { pub fn setting_profile(mut self, name: impl Into) -> Self { self.setting_profile_name = Patch::Set(name.into()); self } pub fn loader_version(mut self, version: impl Into) -> Self { self.mc_loader_version = Patch::Set(version.into()); self } }