summaryrefslogtreecommitdiffstats
path: root/zellij-utils/src/plugin_api/plugin_command.rs
diff options
context:
space:
mode:
Diffstat (limited to 'zellij-utils/src/plugin_api/plugin_command.rs')
-rw-r--r--zellij-utils/src/plugin_api/plugin_command.rs144
1 files changed, 140 insertions, 4 deletions
diff --git a/zellij-utils/src/plugin_api/plugin_command.rs b/zellij-utils/src/plugin_api/plugin_command.rs
index ed476687c..fa570a267 100644
--- a/zellij-utils/src/plugin_api/plugin_command.rs
+++ b/zellij-utils/src/plugin_api/plugin_command.rs
@@ -3,9 +3,11 @@ pub use super::generated_api::api::{
event::{EventNameList as ProtobufEventNameList, Header},
input_mode::InputMode as ProtobufInputMode,
plugin_command::{
- plugin_command::Payload, CommandName, ContextItem, EnvVariable, ExecCmdPayload,
- HttpVerb as ProtobufHttpVerb, IdAndNewName, MovePayload, OpenCommandPanePayload,
- OpenFilePayload, PluginCommand as ProtobufPluginCommand, PluginMessagePayload,
+ plugin_command::Payload, CliPipeOutputPayload, CommandName, ContextItem, EnvVariable,
+ ExecCmdPayload, HttpVerb as ProtobufHttpVerb, IdAndNewName, MessageToPluginPayload,
+ MovePayload, NewPluginArgs as ProtobufNewPluginArgs, OpenCommandPanePayload,
+ OpenFilePayload, PaneId as ProtobufPaneId, PaneType as ProtobufPaneType,
+ PluginCommand as ProtobufPluginCommand, PluginMessagePayload,
RequestPluginPermissionPayload, ResizePayload, RunCommandPayload, SetTimeoutPayload,
SubscribePayload, SwitchSessionPayload, SwitchTabToPayload, UnsubscribePayload,
WebRequestPayload,
@@ -14,7 +16,10 @@ pub use super::generated_api::api::{
resize::ResizeAction as ProtobufResizeAction,
};
-use crate::data::{ConnectToSession, HttpVerb, PermissionType, PluginCommand};
+use crate::data::{
+ ConnectToSession, HttpVerb, MessageToPlugin, NewPluginArgs, PaneId, PermissionType,
+ PluginCommand,
+};
use std::collections::BTreeMap;
use std::convert::TryFrom;
@@ -42,6 +47,33 @@ impl Into<ProtobufHttpVerb> for HttpVerb {
}
}
+impl TryFrom<ProtobufPaneId> for PaneId {
+ type Error = &'static str;
+ fn try_from(protobuf_pane_id: ProtobufPaneId) -> Result<Self, &'static str> {
+ match ProtobufPaneType::from_i32(protobuf_pane_id.pane_type) {
+ Some(ProtobufPaneType::Terminal) => Ok(PaneId::Terminal(protobuf_pane_id.id)),
+ Some(ProtobufPaneType::Plugin) => Ok(PaneId::Plugin(protobuf_pane_id.id)),
+ None => Err("Failed to convert PaneId"),
+ }
+ }
+}
+
+impl TryFrom<PaneId> for ProtobufPaneId {
+ type Error = &'static str;
+ fn try_from(pane_id: PaneId) -> Result<Self, &'static str> {
+ match pane_id {
+ PaneId::Terminal(id) => Ok(ProtobufPaneId {
+ pane_type: ProtobufPaneType::Terminal as i32,
+ id,
+ }),
+ PaneId::Plugin(id) => Ok(ProtobufPaneId {
+ pane_type: ProtobufPaneType::Plugin as i32,
+ id,
+ }),
+ }
+ }
+}
+
impl TryFrom<ProtobufPluginCommand> for PluginCommand {
type Error = &'static str;
fn try_from(protobuf_plugin_command: ProtobufPluginCommand) -> Result<Self, &'static str> {
@@ -641,6 +673,62 @@ impl TryFrom<ProtobufPluginCommand> for PluginCommand {
},
_ => Err("Mismatched payload for RenameSession"),
},
+ Some(CommandName::UnblockCliPipeInput) => match protobuf_plugin_command.payload {
+ Some(Payload::UnblockCliPipeInputPayload(pipe_name)) => {
+ Ok(PluginCommand::UnblockCliPipeInput(pipe_name))
+ },
+ _ => Err("Mismatched payload for UnblockPipeInput"),
+ },
+ Some(CommandName::BlockCliPipeInput) => match protobuf_plugin_command.payload {
+ Some(Payload::BlockCliPipeInputPayload(pipe_name)) => {
+ Ok(PluginCommand::BlockCliPipeInput(pipe_name))
+ },
+ _ => Err("Mismatched payload for BlockPipeInput"),
+ },
+ Some(CommandName::CliPipeOutput) => match protobuf_plugin_command.payload {
+ Some(Payload::CliPipeOutputPayload(CliPipeOutputPayload { pipe_name, output })) => {
+ Ok(PluginCommand::CliPipeOutput(pipe_name, output))
+ },
+ _ => Err("Mismatched payload for PipeOutput"),
+ },
+ Some(CommandName::MessageToPlugin) => match protobuf_plugin_command.payload {
+ Some(Payload::MessageToPluginPayload(MessageToPluginPayload {
+ plugin_url,
+ plugin_config,
+ message_name,
+ message_payload,
+ message_args,
+ new_plugin_args,
+ })) => {
+ let plugin_config: BTreeMap<String, String> = plugin_config
+ .into_iter()
+ .map(|e| (e.name, e.value))
+ .collect();
+ let message_args: BTreeMap<String, String> = message_args
+ .into_iter()
+ .map(|e| (e.name, e.value))
+ .collect();
+ Ok(PluginCommand::MessageToPlugin(MessageToPlugin {
+ plugin_url,
+ plugin_config,
+ message_name,
+ message_payload,
+ message_args,
+ new_plugin_args: new_plugin_args.and_then(|protobuf_new_plugin_args| {
+ Some(NewPluginArgs {
+ should_float: protobuf_new_plugin_args.should_float,
+ pane_id_to_replace: protobuf_new_plugin_args
+ .pane_id_to_replace
+ .and_then(|p_id| PaneId::try_from(p_id).ok()),
+ pane_title: protobuf_new_plugin_args.pane_title,
+ cwd: protobuf_new_plugin_args.cwd.map(|cwd| PathBuf::from(cwd)),
+ skip_cache: protobuf_new_plugin_args.skip_cache,
+ })
+ }),
+ }))
+ },
+ _ => Err("Mismatched payload for PipeOutput"),
+ },
None => Err("Unrecognized plugin command"),
}
}
@@ -1069,6 +1157,54 @@ impl TryFrom<PluginCommand> for ProtobufPluginCommand {
name: CommandName::RenameSession as i32,
payload: Some(Payload::RenameSessionPayload(new_session_name)),
}),
+ PluginCommand::UnblockCliPipeInput(pipe_name) => Ok(ProtobufPluginCommand {
+ name: CommandName::UnblockCliPipeInput as i32,
+ payload: Some(Payload::UnblockCliPipeInputPayload(pipe_name)),
+ }),
+ PluginCommand::BlockCliPipeInput(pipe_name) => Ok(ProtobufPluginCommand {
+ name: CommandName::BlockCliPipeInput as i32,
+ payload: Some(Payload::BlockCliPipeInputPayload(pipe_name)),
+ }),
+ PluginCommand::CliPipeOutput(pipe_name, output) => Ok(ProtobufPluginCommand {
+ name: CommandName::CliPipeOutput as i32,
+ payload: Some(Payload::CliPipeOutputPayload(CliPipeOutputPayload {
+ pipe_name,
+ output,
+ })),
+ }),
+ PluginCommand::MessageToPlugin(message_to_plugin) => {
+ let plugin_config: Vec<_> = message_to_plugin
+ .plugin_config
+ .into_iter()
+ .map(|(name, value)| ContextItem { name, value })
+ .collect();
+ let message_args: Vec<_> = message_to_plugin
+ .message_args
+ .into_iter()
+ .map(|(name, value)| ContextItem { name, value })
+ .collect();
+ Ok(ProtobufPluginCommand {
+ name: CommandName::MessageToPlugin as i32,
+ payload: Some(Payload::MessageToPluginPayload(MessageToPluginPayload {
+ plugin_url: message_to_plugin.plugin_url,
+ plugin_config,
+ message_name: message_to_plugin.message_name,
+ message_payload: message_to_plugin.message_payload,
+ message_args,
+ new_plugin_args: message_to_plugin.new_plugin_args.map(|m_t_p| {
+ ProtobufNewPluginArgs {
+ should_float: m_t_p.should_float,
+ pane_id_to_replace: m_t_p
+ .pane_id_to_replace
+ .and_then(|p_id| ProtobufPaneId::try_from(p_id).ok()),
+ pane_title: m_t_p.pane_title,
+ cwd: m_t_p.cwd.map(|cwd| cwd.display().to_string()),
+ skip_cache: m_t_p.skip_cache,
+ }
+ }),
+ })),
+ })
+ },
}
}
}