use ferinth::structures::{project::ProjectSupportRange, version::Hash, Int};
use serde::{Deserialize, Serialize};
use std::{collections::HashMap, path::PathBuf};
use url::Url;
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Metadata {
pub format_version: Int,
pub game: Game,
pub version_id: String,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub summary: Option<String>,
pub files: Vec<ModpackFile>,
pub dependencies: HashMap<DependencyID, String>,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Hash)]
#[serde(rename_all = "kebab-case")]
pub enum DependencyID {
Minecraft,
Forge,
Neoforge,
FabricLoader,
QuiltLoader,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ModpackFile {
pub path: PathBuf,
pub hashes: Hash,
#[serde(skip_serializing_if = "Option::is_none")]
pub env: Option<ModpackFileEnvironment>,
pub downloads: Vec<Url>,
pub file_size: Int,
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ModpackFileEnvironment {
client: ProjectSupportRange,
server: ProjectSupportRange,
}
#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub enum Game {
Minecraft,
}