mc-launcher-core 0.1.0

This is an mc launcher core written in Rust.
Documentation
use std::collections::HashMap;

use serde::Deserialize;

use crate::{core::version::VersionJson, net::http, LauncherError, Result};

const QUILT_META_BASE: &str = "https://meta.quiltmc.org/v3";

#[derive(Debug, Clone, Deserialize, PartialEq, Eq)]
pub struct QuiltLoaderVersion {
    pub maven: String,
    pub version: String,
    pub build: i32,
    pub separator: String,
    #[serde(default)]
    pub file_size: Option<i64>,
    #[serde(default)]
    pub hashes: HashMap<String, String>,
}

pub fn latest_loader(versions: &[QuiltLoaderVersion]) -> Result<&QuiltLoaderVersion> {
    versions
        .first()
        .ok_or_else(|| LauncherError::LoaderVersionNotFound {
            loader: crate::loader::LoaderKind::Quilt,
            version: "latest".to_string(),
        })
}

pub fn list_loader_versions() -> Result<Vec<QuiltLoaderVersion>> {
    http::get_json(&format!("{QUILT_META_BASE}/versions/loader"))
}

pub fn fetch_profile(minecraft_version: &str, loader_version: &str) -> Result<VersionJson> {
    http::get_json(&format!(
        "{QUILT_META_BASE}/versions/loader/{minecraft_version}/{loader_version}/profile/json"
    ))
}