lyceris 1.1.3

An open source Minecraft launcher library.
Documentation
use std::collections::HashMap;

use serde::{Deserialize, Serialize};

use super::vanilla::{Element, LibraryDownloads};

#[derive(Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CustomMeta {
    pub id: String,
    pub inherits_from: String,
    pub release_time: String,
    pub time: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub r#type: Option<String>,
    pub main_class: String,
    pub arguments: Arguments,
    pub libraries: Vec<Library>,
}

#[derive(Serialize, Deserialize)]
pub struct Arguments {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub game: Option<Vec<Element>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub jvm: Option<Vec<Element>>,
}

#[derive(Serialize, Deserialize, Debug)]
pub struct Library {
    pub name: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub url: Option<String>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub md5: Option<String>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub sha1: Option<String>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub sha256: Option<String>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub sha512: Option<String>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub size: Option<i64>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub downloads: Option<LibraryDownloads>,
}

#[derive(Serialize, Deserialize)]
struct Mirror {
    name: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    image: Option<String>,
    homepage: String,
    url: String,
}

#[derive(Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Installer {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub data: Option<HashMap<String, Data>>,
    pub processors: Option<Vec<Processor>>,
    pub libraries: Vec<Library>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub mirror_list: Option<String>,
}

#[derive(Serialize, Deserialize)]
pub struct Processor {
    pub classpath: Vec<String>,
    pub args: Vec<String>,
    pub sides: Option<Vec<String>>,
    pub outputs: Option<HashMap<String, String>>,
    pub jar: String,
    #[serde(default)]
    pub success: bool,
}

#[derive(Serialize, Deserialize)]
pub struct Data {
    pub client: String,
    pub server: String,
}