pub mod apis; pub mod config; pub mod commands; pub mod input; pub mod db; pub mod error; use std::{io::{Error, ErrorKind, Write}, fs::File}; pub use apis::*; pub use commands::*; use futures_util::StreamExt; use reqwest::Client; #[derive(Debug, Clone, PartialEq, Eq)] pub enum Modloader { Fabric, Forge } impl Modloader { fn stringify(&self) -> String { match self { Modloader::Fabric => String::from("fabric"), Modloader::Forge => String::from("forge"), } } fn from(string: &str) -> Result> { match string { "forge" => Ok(Modloader::Forge), "fabric" => Ok(Modloader::Fabric), _ => Err(Box::new(Error::new(ErrorKind::InvalidData, "UNKNOWN_MODLOADER"))) } } } pub async fn download_file(url: String, path: String, name: String) -> Result<(), Box> { println!("Downloading {}", url); let dl_path_file = format!("{}/{}", path, name); let res = Client::new() .get(String::from(&url)) .send() .await?; // download chunks let mut file = File::create(String::from(&dl_path_file))?; let mut stream = res.bytes_stream(); while let Some(item) = stream.next().await { let chunk = item?; file.write_all(&chunk)?; } Ok(()) }