use crate::launch_entries::action_name::ActionName;
use egui::Ui;
use std::path::Path;
use crate::launch_entries::action_result::ActionResult;
pub(crate) trait LaunchId {
fn id(&self) -> String;
fn launchable(&self) -> bool;
fn file_path(&self) -> &Path;
fn icon_name(&self) -> Option<&str>;
fn comment(&self) -> Option<&str>;
fn debug_ui(&self, ui: &mut Ui, count: usize);
}
pub(crate) trait LaunchAction {
fn actions(&self) -> Vec<&'static str>;
fn default_action(&self) -> &'static str;
fn secondary_action(&self) -> &'static str;
fn invoke(&self, action: &ActionName) -> ActionResult;
fn invoke_default(&self) -> ActionResult;
}
pub(crate) trait Launchable: LaunchId + LaunchAction + Send + Sync {}