zerolaunch_plugin_protocol/
manifest.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct Manifest {
6 #[serde(rename = "plugin")]
8 pub plugin: PluginSection,
9 #[serde(default, rename = "runtime")]
11 pub runtime: RuntimeSection,
12 #[serde(default, rename = "components")]
14 pub components: ComponentsSection,
15 #[serde(default, rename = "ui")]
17 pub ui: Option<UiSection>,
18 #[serde(default, rename = "icon")]
20 pub icon: Option<IconSection>,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct PluginSection {
26 #[serde(rename = "id")]
28 pub id: String,
29 #[serde(rename = "name")]
31 pub name: String,
32 #[serde(rename = "version")]
34 pub version: String,
35 #[serde(rename = "description")]
37 pub description: String,
38 #[serde(rename = "author")]
40 pub author: String,
41 #[serde(default, rename = "homepage")]
43 pub homepage: Option<String>,
44 #[serde(default, rename = "license")]
46 pub license: Option<String>,
47 #[serde(rename = "minHostVersion")]
49 pub min_host_version: String,
50}
51
52#[derive(Debug, Clone, Default, Serialize, Deserialize)]
54pub struct RuntimeSection {
55 #[serde(rename = "command")]
57 pub command: String,
58 #[serde(default, rename = "args")]
60 pub args: Vec<String>,
61 #[serde(default = "default_startup_timeout", rename = "startupTimeout")]
63 pub startup_timeout: u64,
64 #[serde(default = "default_true", rename = "autoRestart")]
66 pub auto_restart: bool,
67 #[serde(default = "default_max_restart", rename = "maxRestart")]
69 pub max_restart: u32,
70}
71
72#[derive(Debug, Clone, Default, Serialize, Deserialize)]
75pub struct ComponentsSection {
76 #[serde(default = "default_provides", rename = "provides")]
80 pub provides: Vec<String>,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
86pub struct UiSection {
87 #[serde(rename = "panelEntry")]
89 pub panel_entry: Option<String>,
90 #[serde(rename = "settingsEntry")]
92 pub settings_entry: Option<String>,
93 #[serde(rename = "resultItemEntry")]
95 pub result_item_entry: Option<String>,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize)]
100pub struct IconSection {
101 #[serde(rename = "path")]
103 pub path: String,
104}
105
106fn default_startup_timeout() -> u64 {
107 10
108}
109fn default_true() -> bool {
110 true
111}
112fn default_max_restart() -> u32 {
113 3
114}
115fn default_provides() -> Vec<String> {
116 vec![]
117}
118
119pub const REQUIRED_PROVIDES_VALUES: &[&str] = &[
121 "plugin",
122 "data_source",
123 "action_executor",
124 "search_engine",
125 "score_booster",
126 "keyword_optimizer",
127 "keyword_injector",
128];
129
130pub const PLUGIN_ID_RE: &str = r"\A[a-z][a-z0-9]*(\.[a-z][a-z0-9_-]*)+\z";