addonscript-rs/crates/model/src/api.rs

66 lines
1.7 KiB
Rust

use std::collections::HashSet;
use addonscript_versioning::Version;
use serde::{Deserialize, Serialize};
use url::Url;
use crate::{AddonDescriptor, enums::APIFeature, Patch};
use super::{AddonScript, File, Hashes, Meta};
#[derive(Debug, Serialize, Deserialize)]
pub struct APIAddon {
pub id: String,
pub namespace: String,
pub versions: Vec<Version>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta: Option<Meta>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct APIFile {
pub link: Vec<Url>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hashes: Option<Hashes>,
#[serde(skip_serializing_if = "Option::is_none")]
pub meta: Option<Meta>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EnvObject {
#[serde(default)]
pub requested: Vec<AddonDescriptor>,
#[serde(default)]
pub provided: Vec<AddonDescriptor>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EnvBuilderRequest {
pub addonscript: AddonScript,
pub addon: AddonDescriptor,
#[serde(skip_serializing_if = "Option::is_none")]
pub client: Option<EnvObject>,
#[serde(skip_serializing_if = "Option::is_none")]
pub server: Option<EnvObject>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct EnvBuilderResponse {
pub addonscript: AddonScript,
pub files: Vec<File>,
#[serde(skip_serializing_if = "Option::is_none")]
pub launch_client: Option<Patch>,
#[serde(skip_serializing_if = "Option::is_none")]
pub launch_server: Option<Patch>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct APIIndex {
pub versions: HashSet<String>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct V2Index {
pub features: HashSet<APIFeature>,
pub manifest_version: i32,
}