legacympt-rs/twitch/src/manifest.rs

79 lines
2 KiB
Rust

use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Manifest {
pub author: String,
pub files: Vec<File>,
pub manifest_type: ManifestType,
pub manifest_version: u8,
pub minecraft: Minecraft,
pub name: String,
pub overrides: String,
pub version: String,
}
impl Manifest {
/// Creates a twitch manifest with the given data.
/// Useful for converting from addonscript manifests
pub fn create(
files: Vec<(u32, u32)>,
contributors: &[String],
name: String,
version: String,
mcversion: String,
modloader: Option<String>,
) -> Self {
Self {
overrides: "overrides".to_owned(),
author: contributors.join(", "),
files: files
.into_iter()
.map(|f| File {
project_id: f.0,
file_id: f.1,
required: true,
})
.collect(),
manifest_type: ManifestType::MinecraftModpack,
manifest_version: 1,
minecraft: Minecraft {
version: mcversion,
mod_loaders: modloader
.map(|id| vec![ModLoader { id, primary: true }])
.unwrap_or_default(),
},
name,
version,
}
}
}
#[derive(Serialize, Deserialize, Debug)]
pub struct File {
#[serde(rename = "projectID")]
pub project_id: u32,
#[serde(rename = "fileID")]
pub file_id: u32,
pub required: bool,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub enum ManifestType {
MinecraftModpack,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Minecraft {
version: String,
mod_loaders: Vec<ModLoader>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ModLoader {
pub id: String,
pub primary: bool,
}