diff options
Diffstat (limited to 'src/app/api/plugins/manifest.rs')
| -rw-r--r-- | src/app/api/plugins/manifest.rs | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/app/api/plugins/manifest.rs b/src/app/api/plugins/manifest.rs index 645748e0..f6464285 100644 --- a/src/app/api/plugins/manifest.rs +++ b/src/app/api/plugins/manifest.rs @@ -1,7 +1,7 @@ use crate::api::schema::{ InstalledPluginInfo, PluginManifestAction, PluginManifestBuild, PluginManifestEventHook, - PluginManifestLinkHandler, PluginManifestPane, PluginPanePlacement, PluginPlatform, - PluginSourceInfo, PluginSourceKind, + PluginManifestLinkHandler, PluginManifestPane, PluginManifestStartup, PluginPanePlacement, + PluginPlatform, PluginSourceInfo, PluginSourceKind, }; use crate::popup_size::PopupSize; @@ -22,6 +22,8 @@ struct RawPluginManifest { #[serde(default)] build: Vec<RawPluginManifestBuild>, #[serde(default)] + startup: Vec<RawPluginManifestStartup>, + #[serde(default)] actions: Vec<RawPluginManifestAction>, #[serde(default)] events: Vec<RawPluginManifestEventHook>, @@ -39,6 +41,13 @@ struct RawPluginManifestBuild { } #[derive(serde::Deserialize)] +struct RawPluginManifestStartup { + #[serde(default)] + platforms: Option<Vec<RawPlatform>>, + command: Vec<String>, +} + +#[derive(serde::Deserialize)] struct RawPluginManifestAction { id: String, title: String, @@ -151,6 +160,11 @@ pub(crate) fn load_plugin_manifest( .into_iter() .map(normalize_manifest_build) .collect::<Result<Vec<_>, _>>()?; + let startup = raw + .startup + .into_iter() + .map(normalize_manifest_startup) + .collect::<Result<Vec<_>, _>>()?; let mut actions = raw .actions .into_iter() @@ -202,6 +216,7 @@ pub(crate) fn load_plugin_manifest( enabled, platforms, build, + startup, actions, events, panes, @@ -250,6 +265,14 @@ fn normalize_manifest_build( Ok(PluginManifestBuild { platforms, command }) } +fn normalize_manifest_startup( + startup: RawPluginManifestStartup, +) -> Result<PluginManifestStartup, (&'static str, String)> { + let platforms = normalize_platforms(startup.platforms)?; + let command = normalize_command(startup.command)?; + Ok(PluginManifestStartup { platforms, command }) +} + pub(super) fn normalize_plugin_source( plugin: &InstalledPluginInfo, source: PluginSourceInfo, @@ -563,7 +586,7 @@ fn non_empty_trimmed( } } -pub(super) fn normalize_plugin_id(value: &str) -> Option<String> { +pub(crate) fn normalize_plugin_id(value: &str) -> Option<String> { normalize_identifier(value, PLUGIN_ID_MAX_CHARS) } |
