use nitro_shared::pkg::{PackageCategory, PackageKind};
#[cfg(feature = "schema")]
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::{HashMap, HashSet};
use crate::PackageContentType;
#[derive(Debug, Deserialize, Serialize, Clone)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct RepoIndex {
#[serde(default)]
pub metadata: RepoMetadata,
#[serde(default)]
pub packages: HashMap<String, RepoPkgEntry>,
}
#[derive(Debug, Deserialize, Serialize, Clone, Default)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(default)]
pub struct RepoMetadata {
pub name: Option<String>,
pub description: Option<String>,
#[serde(alias = "mcvm_version")]
pub nitro_version: Option<String>,
pub color: Option<String>,
pub text_color: Option<String>,
pub package_types: Vec<PackageKind>,
pub package_categories: Vec<PackageCategory>,
}
#[derive(Debug, Deserialize, Serialize, Clone)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
pub struct RepoPkgEntry {
#[serde(default)]
pub url: Option<String>,
#[serde(default)]
pub path: Option<String>,
#[serde(default)]
pub content_type: Option<PackageContentType>,
#[serde(default)]
pub flags: HashSet<PackageFlag>,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "schema", derive(JsonSchema))]
#[serde(rename_all = "snake_case")]
pub enum PackageFlag {
OutOfDate,
Deprecated,
Insecure,
Malicious,
}
pub fn get_api_url(base_url: &str) -> String {
let base_url = if let Some(stripped) = base_url.strip_suffix('/') {
stripped
} else {
base_url
};
base_url.to_string() + "/api/nitrolaunch/"
}
pub fn get_index_url(base_url: &str) -> String {
let api_url = get_api_url(base_url);
api_url + "index.json"
}