style: run cargo fmt

This commit is contained in:
RafayAhmad7548 2026-08-31 01:00:11 +05:00
parent f45493737a
commit 2f057425c3
Signed by: RafayAhmad
SSH key fingerprint: SHA256:WURX8viobA1uawb4dWM3LqYrY+XPcZcXhAXAlrYdhtE
3 changed files with 63 additions and 42 deletions

View file

@ -1,8 +1,11 @@
mod models;
mod utils;
use crate::{models::{vanilla::{VanillaVersionDetail, VanillaVersionType, VanillaVersions}}, utils::{with_progressbar, with_spinner}};
use crate::models::fabric::FabricVersions;
use crate::{
models::vanilla::{VanillaVersionDetail, VanillaVersionType, VanillaVersions},
utils::{with_progressbar, with_spinner},
};
use clap::{
Parser, Subcommand,
builder::styling::{self},
@ -10,7 +13,7 @@ use clap::{
use dialoguer::{FuzzySelect, Select, theme::ColorfulTheme};
use futures_util::StreamExt;
use sha1::{Digest, Sha1};
use std::{error::Error, fmt::format};
use std::error::Error;
use tokio::io::AsyncWriteExt;
fn styles() -> styling::Styles {
@ -55,7 +58,8 @@ async fn main() -> Result<(), Box<dyn Error>> {
let res = with_spinner("", "", || async {
let res: VanillaVersions = reqwest::get(URL).await?.json().await?;
Ok(res)
}).await?;
})
.await?;
let release_versions = res
.versions
@ -73,22 +77,27 @@ async fn main() -> Result<(), Box<dyn Error>> {
.default(0)
.interact()?;
let version_detail: VanillaVersionDetail =
with_spinner("", "", || async {
let version_detail: VanillaVersionDetail = with_spinner("", "", || async {
let version_detail: VanillaVersionDetail =
reqwest::get(release_versions[version_index].url.clone())
.await?
.json()
.await?;
Ok(version_detail)
}).await?;
})
.await?;
let start_msg = format!(
"downloading server.jar for {} {}",
loaders[loader_index], release_version_names[version_index]
);
with_progressbar(&start_msg, "download finished", version_detail.downloads.server.size, |pb| async move {
let server_bytes = reqwest::get(version_detail.downloads.server.url).await?;
with_progressbar(
&start_msg,
"download finished",
version_detail.downloads.server.size,
|pb| async move {
let server_bytes =
reqwest::get(version_detail.downloads.server.url).await?;
let mut file = tokio::fs::File::create("server.jar").await?;
let mut stream = server_bytes.bytes_stream();
@ -98,7 +107,9 @@ async fn main() -> Result<(), Box<dyn Error>> {
pb.inc(chunk.len() as u64);
}
Ok(())
}).await?;
},
)
.await?;
with_spinner("verifying sha1 hash", "sha1 hash verified", || async {
let data = tokio::fs::read("server.jar").await?;
@ -112,16 +123,19 @@ async fn main() -> Result<(), Box<dyn Error>> {
return Err("sha1 verifaction failed for downloaded file".into());
}
Ok(())
}).await?;
})
.await?;
}
1 => {
const URL: &str = "https://meta.fabricmc.net/v2/versions";
let res = with_spinner("", "", || async {
let res: FabricVersions = reqwest::get(URL).await?.json().await?;
Ok(res)
}).await?;
})
.await?;
let game_version_names = res.game
let game_version_names = res
.game
.iter()
.filter(|game| game.stable)
.map(|game| game.version.clone())
@ -133,7 +147,8 @@ async fn main() -> Result<(), Box<dyn Error>> {
.default(0)
.interact()?;
let loader_version_names = res.loader
let loader_version_names = res
.loader
.iter()
.filter(|loader| loader.stable)
.map(|loader| loader.version.clone())
@ -147,16 +162,22 @@ async fn main() -> Result<(), Box<dyn Error>> {
let game_version = game_version_names[game_version_index].clone();
let loader_version = loader_version_names[loader_version_index].clone();
let installer_version = res.installer
let installer_version = res
.installer
.iter()
.find_map(|installer| {
if installer.stable { Some(installer.version.clone()) }
else { None }
}).ok_or("No Installer Version Found")?;
if installer.stable {
Some(installer.version.clone())
} else {
None
}
})
.ok_or("No Installer Version Found")?;
let start_msg = format!(
"downloading server.jar for {} {}, {}",
loaders[loader_index], loader_version_names[loader_version_index],
loaders[loader_index],
loader_version_names[loader_version_index],
game_version_names[game_version_index],
);
with_spinner(&start_msg, "download finished", || async {
@ -173,8 +194,8 @@ async fn main() -> Result<(), Box<dyn Error>> {
}
Ok(())
}).await?;
})
.await?;
}
_ => return Err("Invalid selection".into()),
}

View file

@ -1,2 +1,2 @@
pub mod vanilla;
pub mod fabric;
pub mod vanilla;

View file

@ -1,5 +1,5 @@
use std::{error::Error, future::Future};
use indicatif::{ProgressBar, ProgressStyle};
use std::{error::Error, future::Future};
pub async fn with_spinner<F, Fut, T>(
start_msg: &str,
@ -19,7 +19,6 @@ where
pb.finish_and_clear();
if !finish_msg.is_empty() {
println!("{} {}", dialoguer::console::style("✔").green(), finish_msg);
}
result
@ -33,12 +32,13 @@ pub async fn with_progressbar<F, Fut, T>(
) -> Result<T, Box<dyn Error>>
where
F: FnOnce(ProgressBar) -> Fut,
Fut: Future<Output = Result<T, Box<dyn Error>>>
Fut: Future<Output = Result<T, Box<dyn Error>>>,
{
let pb = ProgressBar::new(len);
pb.set_style(ProgressStyle::default_bar().template(
"{msg}\n{bar:40.green/white} {bytes}/{total_bytes} ({bytes_per_sec})",
)?);
pb.set_style(
ProgressStyle::default_bar()
.template("{msg}\n{bar:40.green/white} {bytes}/{total_bytes} ({bytes_per_sec})")?,
);
pb.set_message(start_msg.to_string());
let result = f(pb.clone()).await;