use serde::Deserialize;
#[derive(Deserialize)]
pub(crate) struct ShowNotification {
pub(crate) message: String,
#[serde(default)]
pub(crate) level: String,
}
#[derive(Deserialize)]
pub(crate) struct OpenFile {
pub(crate) path: String,
}
#[derive(Deserialize)]
pub(crate) struct UpdateStatusBar {
pub(crate) text: String,
#[serde(default)]
pub(crate) slot: String,
}
#[derive(Deserialize)]
pub(crate) struct CreateTerminal {
pub(crate) command: String,
#[serde(default = "default_terminal_title")]
pub(crate) title: String,
}
fn default_terminal_title() -> String {
"Terminal".to_owned()
}
#[derive(Deserialize)]
pub(crate) struct ShowPicker {
#[serde(default)]
pub(crate) title: String,
#[serde(default)]
pub(crate) items: Vec<PickerItem>,
}
#[derive(Deserialize)]
pub(crate) struct PickerItem {
#[serde(default)]
pub(crate) label: String,
#[serde(default)]
pub(crate) value: String,
}
#[derive(Deserialize)]
pub(crate) struct RunCommand {
pub(crate) id: String,
}
#[derive(Deserialize)]
#[serde(untagged)]
pub(crate) enum Payload {
ShowNotification { show_notification: ShowNotification },
OpenFile { open_file: OpenFile },
UpdateStatusBar { update_status_bar: UpdateStatusBar },
CreateTerminal { create_terminal: CreateTerminal },
ShowPicker { show_picker: ShowPicker },
RunCommand { run_command: RunCommand },
}