use clap::ValueEnum;
use semver::Version;
use serde::{Deserialize, Serialize};
use std::collections::{HashMap, HashSet};
use strum::{Display, EnumIter};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Instance {
pub minecraft_version: Version,
pub loader: Loader,
pub loader_version: Version,
pub allowed_foreign_loaders: HashSet<Loader>,
}
impl Instance {
#[must_use = "Unused instance dependencies"]
pub fn index_dependencies(&self) -> HashMap<Loader, Version> {
let mut dependencies = HashMap::new();
dependencies.insert(self.loader, self.loader_version.clone());
dependencies.insert(Loader::Minecraft, self.minecraft_version.clone());
dependencies
}
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, ValueEnum, EnumIter, Display, Hash,
)]
#[serde(rename_all = "lowercase")]
pub enum Loader {
#[serde(alias = "vanilla", alias = "none", alias = "datapack")]
Minecraft,
Forge,
Neoforge,
Fabric,
Quilt,
#[serde(other)]
Other,
}