From d383d8027c6b22f5181b06cb7eef111cb8a5d9a6 Mon Sep 17 00:00:00 2001 From: RafayAhmad7548 Date: Mon, 31 Aug 2026 01:51:16 +0500 Subject: [PATCH 1/2] feat: write install server metadata into config file --- src/main.rs | 26 ++++++++++++++++++++++++++ src/models/config.rs | 17 +++++++++++++++++ src/models/mod.rs | 1 + 3 files changed, 44 insertions(+) create mode 100644 src/models/config.rs diff --git a/src/main.rs b/src/main.rs index d74e49c..cf620b8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ mod models; mod utils; +use crate::models::config::{Config, Mods, Server}; use crate::models::fabric::FabricVersions; use crate::{ models::vanilla::{VanillaVersionDetail, VanillaVersionType, VanillaVersions}, @@ -43,6 +44,7 @@ async fn main() -> Result<(), Box> { Commands::Init { name: project_name } => { tokio::fs::create_dir(&project_name).await?; std::env::set_current_dir(&project_name)?; + let mut config_file = tokio::fs::File::create("mcsm.toml").await?; let loaders = vec!["Vanilla", "Fabric"]; let loader_index = Select::with_theme(&ColorfulTheme::default()) @@ -125,6 +127,18 @@ async fn main() -> Result<(), Box> { Ok(()) }) .await?; + + let config = Config { + server: Server { + version: release_version_names[version_index].to_string(), + loader: loaders[loader_index].to_string(), + loader_version: None, + }, + mods: Mods {}, + }; + config_file + .write_all(toml::to_string(&config)?.as_bytes()) + .await?; } 1 => { const URL: &str = "https://meta.fabricmc.net/v2/versions"; @@ -196,6 +210,18 @@ async fn main() -> Result<(), Box> { Ok(()) }) .await?; + + let config = Config { + server: Server { + version: game_version, + loader: loaders[loader_index].to_string(), + loader_version: Some(loader_version), + }, + mods: Mods {}, + }; + config_file + .write_all(toml::to_string(&config)?.as_bytes()) + .await?; } _ => return Err("Invalid selection".into()), } diff --git a/src/models/config.rs b/src/models/config.rs new file mode 100644 index 0000000..3505350 --- /dev/null +++ b/src/models/config.rs @@ -0,0 +1,17 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Deserialize, Serialize)] +pub struct Config { + pub server: Server, + pub mods: Mods, +} + +#[derive(Deserialize, Serialize)] +pub struct Server { + pub version: String, + pub loader: String, + pub loader_version: Option, +} + +#[derive(Deserialize, Serialize)] +pub struct Mods {} diff --git a/src/models/mod.rs b/src/models/mod.rs index 0855604..4120088 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -1,2 +1,3 @@ +pub mod config; pub mod fabric; pub mod vanilla; From 712b95e24d824092873bda130b158e01f25ad1a1 Mon Sep 17 00:00:00 2001 From: RafayAhmad7548 Date: Mon, 31 Aug 2026 02:03:11 +0500 Subject: [PATCH 2/2] refactor: rename some stuff --- src/main.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index cf620b8..217e4cb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -33,7 +33,7 @@ struct Mcsm { #[derive(Subcommand)] enum Commands { - Init { name: String }, + Create { project_name: String }, } #[tokio::main] @@ -41,8 +41,8 @@ async fn main() -> Result<(), Box> { let mcsm = Mcsm::parse(); match mcsm.command { - Commands::Init { name: project_name } => { - tokio::fs::create_dir(&project_name).await?; + Commands::Create { project_name } => { + tokio::fs::create_dir_all(&project_name).await?; std::env::set_current_dir(&project_name)?; let mut config_file = tokio::fs::File::create("mcsm.toml").await?;