use std::borrow::Cow;
use rust_i18n::t;
use super::ResourceTab;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ActionKind {
Start,
Shutdown,
Reboot,
Clone,
Backup,
Stop,
Unbind,
Unmount,
ScaleUp,
ScaleDown,
Delete
}
impl ActionKind {
#[must_use]
pub const fn label(self) -> &'static str {
match self {
Self::Start => "Start",
Self::Shutdown => "Shutdown",
Self::Reboot => "Reboot",
Self::Clone => "Clone",
Self::Backup => "Backup",
Self::Stop => "Stop",
Self::Unbind => "Unbind",
Self::Unmount => "Unmount",
Self::ScaleUp => "Scale up",
Self::ScaleDown => "Scale down",
Self::Delete => "Delete"
}
}
#[must_use]
pub fn display_label(self) -> Cow<'static, str> {
match self {
Self::Start => t!("app.action_start"),
Self::Shutdown => t!("app.action_shutdown"),
Self::Reboot => t!("app.action_reboot"),
Self::Clone => t!("app.action_clone"),
Self::Backup => t!("app.action_backup"),
Self::Stop => t!("app.action_stop"),
Self::Unbind => t!("app.action_unbind"),
Self::Unmount => t!("app.action_unmount"),
Self::ScaleUp => t!("app.action_scale_up"),
Self::ScaleDown => t!("app.action_scale_down"),
Self::Delete => t!("app.action_delete")
}
}
#[must_use]
pub const fn is_destructive(self) -> bool {
matches!(self, Self::Delete | Self::ScaleDown)
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct PendingAction {
pub tab: ResourceTab,
pub kind: ActionKind,
pub resource_id: String,
pub resource_name: String
}
impl super::App {
pub fn confirm_action(&mut self) {
self.dispatch = self.confirm.take();
}
pub fn cancel_action(&mut self) {
self.confirm = None;
}
#[must_use]
pub const fn pending_action(&self) -> Option<&PendingAction> {
self.confirm.as_ref()
}
#[must_use]
pub const fn awaiting_confirm(&self) -> bool {
self.confirm.is_some()
}
#[must_use]
pub const fn take_dispatch(&mut self) -> Option<PendingAction> {
self.dispatch.take()
}
}