zerolaunch_plugin_protocol/
manifest.rs1use serde::{Deserialize, Serialize};
2use zerolaunch_plugin_api::PluginMode;
3
4#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct Manifest {
7 #[serde(rename = "plugin")]
9 pub plugin: PluginSection,
10 #[serde(default, rename = "runtime")]
12 pub runtime: RuntimeSection,
13 #[serde(default, rename = "components")]
15 pub components: ComponentsSection,
16 #[serde(default, rename = "ui")]
18 pub ui: Option<UiSection>,
19 #[serde(default, rename = "icon")]
21 pub icon: Option<IconSection>,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct PluginSection {
27 #[serde(rename = "id")]
29 pub id: String,
30 #[serde(rename = "name")]
32 pub name: String,
33 #[serde(rename = "version")]
35 pub version: String,
36 #[serde(rename = "description")]
38 pub description: String,
39 #[serde(rename = "author")]
41 pub author: String,
42 #[serde(rename = "mode")]
44 pub mode: PluginMode,
45 #[serde(default, rename = "hotkey")]
47 pub hotkey: Option<String>,
48 #[serde(rename = "triggerKeywords")]
50 pub trigger_keywords: Vec<String>,
51 #[serde(rename = "supportedOs")]
53 pub supported_os: Vec<String>,
54 #[serde(rename = "priority")]
56 pub priority: u32,
57 #[serde(default, rename = "homepage")]
59 pub homepage: Option<String>,
60 #[serde(default, rename = "license")]
62 pub license: Option<String>,
63}
64
65#[derive(Debug, Clone, Default, Serialize, Deserialize)]
67pub struct RuntimeSection {
68 #[serde(rename = "command")]
70 pub command: String,
71 #[serde(default, rename = "args")]
73 pub args: Vec<String>,
74 #[serde(default = "default_startup_timeout", rename = "startupTimeout")]
76 pub startup_timeout: u64,
77 #[serde(default = "default_true", rename = "autoRestart")]
79 pub auto_restart: bool,
80 #[serde(default = "default_max_restart", rename = "maxRestart")]
82 pub max_restart: u32,
83}
84
85#[derive(Debug, Clone, Default, Serialize, Deserialize)]
88pub struct ComponentsSection {
89 #[serde(default = "default_provides", rename = "provides")]
93 pub provides: Vec<String>,
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize)]
99pub struct UiSection {
100 #[serde(rename = "panelEntry")]
102 pub panel_entry: Option<String>,
103 #[serde(rename = "settingsEntry")]
105 pub settings_entry: Option<String>,
106 #[serde(rename = "resultItemEntry")]
108 pub result_item_entry: Option<String>,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
113pub struct IconSection {
114 #[serde(rename = "path")]
116 pub path: String,
117}
118
119fn default_startup_timeout() -> u64 {
120 10
121}
122fn default_true() -> bool {
123 true
124}
125fn default_max_restart() -> u32 {
126 3
127}
128fn default_provides() -> Vec<String> {
129 vec![]
130}
131
132pub const REQUIRED_PROVIDES_VALUES: &[&str] = &[
134 "plugin",
135 "data_source",
136 "action_executor",
137 "search_engine",
138 "score_booster",
139 "keyword_optimizer",
140 "keyword_injector",
141];
142
143pub const PLUGIN_ID_RE: &str = r"\A[a-z][a-z0-9]*(\.[a-z][a-z0-9_-]*)+\z";