1use std::collections::BTreeMap;
2use std::path::{Path, PathBuf};
3
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
8#[serde(rename_all = "kebab-case")]
9pub enum PluginBackendKind {
10 Lua,
12 Wasi,
14}
15
16#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
18pub struct PluginManifest {
19 pub name: String,
21 pub backend: PluginBackendKind,
23 pub source: PathBuf,
25 #[serde(default)]
27 pub description: Option<String>,
28 #[serde(default)]
30 pub aliases: Vec<String>,
31 #[serde(default)]
33 pub version: Option<String>,
34 #[serde(default)]
36 pub homepage: Option<String>,
37 #[serde(default)]
39 pub update_url: Option<String>,
40 #[serde(default)]
42 pub manifest_url: Option<String>,
43 #[serde(default)]
45 pub min_runtime_version: Option<String>,
46 #[serde(default)]
48 pub notes: Vec<String>,
49 #[serde(default)]
51 pub legacy_filenames: Vec<String>,
52}
53
54#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
56pub struct AvailableVersion {
57 pub version: String,
59 #[serde(default)]
61 pub note: Option<String>,
62 #[serde(default)]
64 pub additions: Vec<AvailableAddition>,
65}
66
67#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
69pub struct AvailableAddition {
70 pub name: String,
72 pub version: String,
74 #[serde(default)]
76 pub note: Option<String>,
77}
78
79#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
81pub struct EnvKey {
82 pub key: String,
84 pub value: String,
86}
87
88#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
90pub struct Checksum {
91 pub algorithm: String,
93 pub value: String,
95}
96
97#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
99#[serde(tag = "kind", rename_all = "kebab-case")]
100pub enum InstallSource {
101 Directory { path: PathBuf },
103 File { path: PathBuf },
105 Url {
107 url: String,
108 #[serde(default)]
109 headers: BTreeMap<String, String>,
110 },
111}
112
113#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
115pub struct InstallArtifact {
116 pub name: String,
118 pub version: String,
120 pub source: InstallSource,
122 #[serde(default)]
124 pub note: Option<String>,
125 #[serde(default)]
127 pub checksum: Option<Checksum>,
128}
129
130#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
132pub struct InstallPlan {
133 pub plugin: String,
135 pub version: String,
137 pub main: InstallArtifact,
139 #[serde(default)]
141 pub additions: Vec<InstallArtifact>,
142 #[serde(default)]
144 pub legacy_filenames: Vec<String>,
145}
146
147#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
149pub struct InstalledArtifact {
150 pub name: String,
152 pub version: String,
154 pub path: PathBuf,
156 #[serde(default)]
158 pub note: Option<String>,
159}
160
161#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
163pub struct InstalledRuntime {
164 pub plugin: String,
166 pub version: String,
168 pub root_dir: PathBuf,
170 pub main: InstalledArtifact,
172 #[serde(default)]
174 pub additions: Vec<InstalledArtifact>,
175}
176
177impl InstalledRuntime {
178 pub fn main_path(&self) -> &Path {
180 &self.main.path
181 }
182}